+
+ switch (integer_declaration->base) {
+ case 0: /* default */
+ case 10:
+ if (!integer_declaration->signedness) {
+ fprintf(pos->fp, "%" PRIu64,
+ integer_definition->value._unsigned);
+ } else {
+ fprintf(pos->fp, "%" PRId64,
+ integer_definition->value._signed);
+ }
+ break;
+ case 2:
+ {
+ int bitnr;
+ uint64_t v;
+
+ if (!integer_declaration->signedness)
+ v = integer_definition->value._unsigned;
+ else
+ v = (uint64_t) integer_definition->value._signed;
+
+ fprintf(pos->fp, "0b");
+ v = _bt_piecewise_lshift(v, 64 - integer_declaration->len);
+ for (bitnr = 0; bitnr < integer_declaration->len; bitnr++) {
+ fprintf(pos->fp, "%u", (v & (1ULL << 63)) ? 1 : 0);
+ v = _bt_piecewise_lshift(v, 1);
+ }
+ break;
+ }
+ case 8:
+ {
+ uint64_t v;
+
+ if (!integer_declaration->signedness) {
+ v = integer_definition->value._unsigned;
+ } else {
+ v = (uint64_t) integer_definition->value._signed;
+ if (integer_declaration->len < 64) {
+ size_t len = integer_declaration->len;
+ size_t rounded_len;
+
+ assert(len != 0);
+ /* Round length to the nearest 3-bit */
+ rounded_len = (((len - 1) / 3) + 1) * 3;
+ v &= ((uint64_t) 1 << rounded_len) - 1;
+ }
+ }
+
+ fprintf(pos->fp, "0%" PRIo64, v);
+ break;
+ }
+ case 16:
+ {
+ uint64_t v;
+
+ if (!integer_declaration->signedness) {
+ v = integer_definition->value._unsigned;
+ } else {
+ v = (uint64_t) integer_definition->value._signed;
+ if (integer_declaration->len < 64) {
+ /* Round length to the nearest nibble */
+ uint8_t rounded_len =
+ ((integer_declaration->len + 3) & ~0x3);
+
+ v &= ((uint64_t) 1 << rounded_len) - 1;
+ }
+ }
+
+ fprintf(pos->fp, "0x%" PRIX64, v);
+ break;
+ }
+ default:
+ return -EINVAL;
+ }
+
+ ctf_text_integer_write_debug_info(ppos, definition);
+
+ return 0;