According to the oswiki link: https://wiki.osdev.org/GDT, the size takes up the lower 16 bits.
Hence the gdt struct definition on section 5.3 should be the following instead:
struct gdt
{
unsigned short size;
unsigned int start_address;
} __attribute__((packed));
According to the oswiki link: https://wiki.osdev.org/GDT, the size takes up the lower 16 bits. Hence the gdt struct definition on section 5.3 should be the following instead: