void dump_segment(entry_t &segment) { cdebug.print("base %x, limit %x, type %x(%c), dpl %x, %s present, %s-bit, granularity %d\n", segment.base_low + (segment.base_middle << 16) + (segment.base_high << 24), segment.limit_low + (segment.gflags.limit_high << 16), segment.aflags.type, "sd"[segment.aflags.system], segment.aflags.dpl, segment.aflags.present? "":"not", segment.gflags.bitness? "16":"32", segment.gflags.granularity); } // You may have to change your GDT struct to something like this: typedef struct __attribute__((packed)) { uint_16 limit_low; uint_16 base_low; uint_8 base_middle; union { uint_8 access; struct { uint_8 type:4; uint_8 system:1; uint_8 dpl:2; uint_8 present:1; } aflags; }; union { uint_8 granularity; struct { uint_8 limit_high:4; uint_8 unused:1; uint_8 reserved:1; uint_8 bitness:1; uint_8 granularity:1; } gflags; }; uint_8 base_high; } entry_t;