Annotation of GNUtools/cctools/libstuff/bytesex.c, revision 1.1

1.1     ! root        1: /* byte_sex.c */
        !             2: #include <mach-o/fat.h>
        !             3: #include <mach-o/loader.h>
        !             4: #import <mach/m68k/thread_status.h>
        !             5: #import <mach/m98k/thread_status.h>
        !             6: #import <mach/m88k/thread_status.h>
        !             7: #import <mach/i860/thread_status.h>
        !             8: #import <mach/i386/thread_status.h>
        !             9: #import <mach/hppa/thread_status.h>
        !            10: #import <mach/sparc/thread_status.h>
        !            11: #include <mach-o/nlist.h>
        !            12: #include <mach-o/reloc.h>
        !            13: #include <bsd/ranlib.h>
        !            14: #include "stuff/bool.h"
        !            15: #include "stuff/bytesex.h"
        !            16: 
        !            17: double
        !            18: SWAP_DOUBLE(
        !            19: double d)
        !            20: {
        !            21:        union {
        !            22:            char c[8];
        !            23:            double d;
        !            24:        } in, out;
        !            25:        in.d = d;
        !            26:        out.c[0] = in.c[7];
        !            27:        out.c[1] = in.c[6];
        !            28:        out.c[2] = in.c[5];
        !            29:        out.c[3] = in.c[4];
        !            30:        out.c[4] = in.c[3];
        !            31:        out.c[5] = in.c[2];
        !            32:        out.c[6] = in.c[1];
        !            33:        out.c[7] = in.c[0];
        !            34:        return(out.d);
        !            35: }
        !            36: 
        !            37: float
        !            38: SWAP_FLOAT(
        !            39: float f)
        !            40: {
        !            41:        union {
        !            42:            char c[7];
        !            43:            float f;
        !            44:        } in, out;
        !            45:        in.f = f;
        !            46:        out.c[0] = in.c[3];
        !            47:        out.c[1] = in.c[2];
        !            48:        out.c[2] = in.c[1];
        !            49:        out.c[3] = in.c[0];
        !            50:        return(out.f);
        !            51: }
        !            52: 
        !            53: /*
        !            54:  * get_host_byte_sex() returns the enum constant for the byte sex of the host
        !            55:  * it is running on.
        !            56:  */
        !            57: enum byte_sex
        !            58: get_host_byte_sex(
        !            59: void)
        !            60: {
        !            61:     unsigned long s;
        !            62: 
        !            63:        s = (BIG_ENDIAN_BYTE_SEX << 24) | LITTLE_ENDIAN_BYTE_SEX;
        !            64:        return((enum byte_sex)*((char *)&s));
        !            65: }
        !            66: 
        !            67: void
        !            68: swap_fat_header(
        !            69: struct fat_header *fat_header,
        !            70: enum byte_sex target_byte_sex)
        !            71: {
        !            72:        fat_header->magic     = SWAP_LONG(fat_header->magic);
        !            73:        fat_header->nfat_arch = SWAP_LONG(fat_header->nfat_arch);
        !            74: }
        !            75: 
        !            76: void
        !            77: swap_fat_arch(
        !            78: struct fat_arch *fat_archs,
        !            79: unsigned long nfat_arch,
        !            80: enum byte_sex target_byte_sex)
        !            81: {
        !            82:     unsigned long i;
        !            83: 
        !            84:        for(i = 0; i < nfat_arch; i++){
        !            85:            fat_archs[i].cputype    = SWAP_LONG(fat_archs[i].cputype);
        !            86:            fat_archs[i].cpusubtype = SWAP_LONG(fat_archs[i].cpusubtype);
        !            87:            fat_archs[i].offset     = SWAP_LONG(fat_archs[i].offset);
        !            88:            fat_archs[i].size       = SWAP_LONG(fat_archs[i].size);
        !            89:            fat_archs[i].align      = SWAP_LONG(fat_archs[i].align);
        !            90:        }
        !            91: }
        !            92: 
        !            93: void
        !            94: swap_mach_header(
        !            95: struct mach_header *mh,
        !            96: enum byte_sex target_byte_sex)
        !            97: {
        !            98:        mh->magic = SWAP_LONG(mh->magic);
        !            99:        mh->cputype = SWAP_LONG(mh->cputype);
        !           100:        mh->cpusubtype = SWAP_LONG(mh->cpusubtype);
        !           101:        mh->filetype = SWAP_LONG(mh->filetype);
        !           102:        mh->ncmds = SWAP_LONG(mh->ncmds);
        !           103:        mh->sizeofcmds = SWAP_LONG(mh->sizeofcmds);
        !           104:        mh->flags = SWAP_LONG(mh->flags);
        !           105: }
        !           106: 
        !           107: void
        !           108: swap_load_command(
        !           109: struct load_command *lc,
        !           110: enum byte_sex target_byte_sex)
        !           111: {
        !           112:        lc->cmd = SWAP_LONG(lc->cmd);
        !           113:        lc->cmdsize = SWAP_LONG(lc->cmdsize);
        !           114: }
        !           115: 
        !           116: void
        !           117: swap_segment_command(
        !           118: struct segment_command *sg,
        !           119: enum byte_sex target_byte_sex)
        !           120: {
        !           121:        /* segname[16] */
        !           122:        sg->cmd = SWAP_LONG(sg->cmd);
        !           123:        sg->cmdsize = SWAP_LONG(sg->cmdsize);
        !           124:        sg->vmaddr = SWAP_LONG(sg->vmaddr);
        !           125:        sg->vmsize = SWAP_LONG(sg->vmsize);
        !           126:        sg->fileoff = SWAP_LONG(sg->fileoff);
        !           127:        sg->filesize = SWAP_LONG(sg->filesize);
        !           128:        sg->maxprot = SWAP_LONG(sg->maxprot);
        !           129:        sg->initprot = SWAP_LONG(sg->initprot);
        !           130:        sg->nsects = SWAP_LONG(sg->nsects);
        !           131:        sg->flags = SWAP_LONG(sg->flags);
        !           132: }
        !           133: 
        !           134: void
        !           135: swap_section(
        !           136: struct section *s,
        !           137: unsigned long nsects,
        !           138: enum byte_sex target_byte_sex)
        !           139: {
        !           140:     unsigned long i;
        !           141: 
        !           142:        for(i = 0; i < nsects; i++){
        !           143:            /* sectname[16] */
        !           144:            /* segname[16] */
        !           145:            s[i].addr = SWAP_LONG(s[i].addr);
        !           146:            s[i].size = SWAP_LONG(s[i].size);
        !           147:            s[i].offset = SWAP_LONG(s[i].offset);
        !           148:            s[i].align = SWAP_LONG(s[i].align);
        !           149:            s[i].reloff = SWAP_LONG(s[i].reloff);
        !           150:            s[i].nreloc = SWAP_LONG(s[i].nreloc);
        !           151:            s[i].flags = SWAP_LONG(s[i].flags);
        !           152:            s[i].reserved1 = SWAP_LONG(s[i].reserved1);
        !           153:            s[i].reserved2 = SWAP_LONG(s[i].reserved2);
        !           154:        }
        !           155: }
        !           156: 
        !           157: void
        !           158: swap_symtab_command(
        !           159: struct symtab_command *st,
        !           160: enum byte_sex target_byte_sex)
        !           161: {
        !           162:        st->cmd = SWAP_LONG(st->cmd);
        !           163:        st->cmdsize = SWAP_LONG(st->cmdsize);
        !           164:        st->symoff = SWAP_LONG(st->symoff);
        !           165:        st->nsyms = SWAP_LONG(st->nsyms);
        !           166:        st->stroff = SWAP_LONG(st->stroff);
        !           167:        st->strsize = SWAP_LONG(st->strsize);
        !           168: }
        !           169: 
        !           170: void
        !           171: swap_dysymtab_command(
        !           172: struct dysymtab_command *dyst,
        !           173: enum byte_sex target_byte_sex)
        !           174: {
        !           175:        dyst->cmd = SWAP_LONG(dyst->cmd);
        !           176:        dyst->cmdsize = SWAP_LONG(dyst->cmdsize);
        !           177:        dyst->ilocalsym = SWAP_LONG(dyst->ilocalsym);
        !           178:        dyst->nlocalsym = SWAP_LONG(dyst->nlocalsym);
        !           179:        dyst->iextdefsym = SWAP_LONG(dyst->iextdefsym);
        !           180:        dyst->nextdefsym = SWAP_LONG(dyst->nextdefsym);
        !           181:        dyst->iundefsym = SWAP_LONG(dyst->iundefsym);
        !           182:        dyst->nundefsym = SWAP_LONG(dyst->nundefsym);
        !           183:        dyst->tocoff = SWAP_LONG(dyst->tocoff);
        !           184:        dyst->ntoc = SWAP_LONG(dyst->ntoc);
        !           185:        dyst->modtaboff = SWAP_LONG(dyst->modtaboff);
        !           186:        dyst->nmodtab = SWAP_LONG(dyst->nmodtab);
        !           187:        dyst->extrefsymoff = SWAP_LONG(dyst->extrefsymoff);
        !           188:        dyst->nextrefsyms = SWAP_LONG(dyst->nextrefsyms);
        !           189:        dyst->indirectsymoff = SWAP_LONG(dyst->indirectsymoff);
        !           190:        dyst->nindirectsyms = SWAP_LONG(dyst->nindirectsyms);
        !           191:        dyst->extreloff = SWAP_LONG(dyst->extreloff);
        !           192:        dyst->nextrel = SWAP_LONG(dyst->nextrel);
        !           193:        dyst->locreloff = SWAP_LONG(dyst->locreloff);
        !           194:        dyst->nlocrel = SWAP_LONG(dyst->nlocrel);
        !           195: }
        !           196: 
        !           197: void
        !           198: swap_symseg_command(
        !           199: struct symseg_command *ss,
        !           200: enum byte_sex target_byte_sex)
        !           201: {
        !           202:        ss->cmd = SWAP_LONG(ss->cmd);
        !           203:        ss->cmdsize = SWAP_LONG(ss->cmdsize);
        !           204:        ss->offset = SWAP_LONG(ss->offset);
        !           205:        ss->size = SWAP_LONG(ss->size);
        !           206: }
        !           207: 
        !           208: void
        !           209: swap_fvmlib_command(
        !           210: struct fvmlib_command *fl,
        !           211: enum byte_sex target_byte_sex)
        !           212: {
        !           213:        fl->cmd = SWAP_LONG(fl->cmd);
        !           214:        fl->cmdsize = SWAP_LONG(fl->cmdsize);
        !           215:        fl->fvmlib.name.offset = SWAP_LONG(fl->fvmlib.name.offset);
        !           216:        fl->fvmlib.minor_version = SWAP_LONG(fl->fvmlib.minor_version);
        !           217:        fl->fvmlib.header_addr = SWAP_LONG(fl->fvmlib.header_addr);
        !           218: }
        !           219: 
        !           220: void
        !           221: swap_dylib_command(
        !           222: struct dylib_command *dl,
        !           223: enum byte_sex target_byte_sex)
        !           224: {
        !           225:        dl->cmd = SWAP_LONG(dl->cmd);
        !           226:        dl->cmdsize = SWAP_LONG(dl->cmdsize);
        !           227:        dl->dylib.name.offset = SWAP_LONG(dl->dylib.name.offset);
        !           228:        dl->dylib.timestamp = SWAP_LONG(dl->dylib.timestamp);
        !           229:        dl->dylib.current_version = SWAP_LONG(dl->dylib.current_version);
        !           230:        dl->dylib.compatibility_version =
        !           231:                                SWAP_LONG(dl->dylib.compatibility_version);
        !           232: }
        !           233: 
        !           234: void
        !           235: swap_dylinker_command(
        !           236: struct dylinker_command *dyld,
        !           237: enum byte_sex target_byte_sex)
        !           238: {
        !           239:        dyld->cmd = SWAP_LONG(dyld->cmd);
        !           240:        dyld->cmdsize = SWAP_LONG(dyld->cmdsize);
        !           241:        dyld->name.offset = SWAP_LONG(dyld->name.offset);
        !           242: }
        !           243: 
        !           244: void
        !           245: swap_fvmfile_command(
        !           246: struct fvmfile_command *ff,
        !           247: enum byte_sex target_byte_sex)
        !           248: {
        !           249:        ff->cmd = SWAP_LONG(ff->cmd);
        !           250:        ff->cmdsize = SWAP_LONG(ff->cmdsize);
        !           251:        ff->name.offset = SWAP_LONG(ff->name.offset);
        !           252:        ff->header_addr = SWAP_LONG(ff->header_addr);
        !           253: }
        !           254: 
        !           255: 
        !           256: void
        !           257: swap_thread_command(
        !           258: struct thread_command *ut,
        !           259: enum byte_sex target_byte_sex)
        !           260: {
        !           261:        ut->cmd = SWAP_LONG(ut->cmd);
        !           262:        ut->cmdsize = SWAP_LONG(ut->cmdsize);
        !           263: }
        !           264: 
        !           265: void
        !           266: swap_m68k_thread_state_regs(
        !           267: struct m68k_thread_state_regs *cpu,
        !           268: enum byte_sex target_byte_sex)
        !           269: {
        !           270:     unsigned long i;
        !           271: 
        !           272:        for(i = 0; i < 8; i++)
        !           273:            cpu->dreg[i] = SWAP_LONG(cpu->dreg[i]);
        !           274:        for(i = 0; i < 8; i++)
        !           275:            cpu->areg[i] = SWAP_LONG(cpu->areg[i]);
        !           276:        cpu->pad0 = SWAP_SHORT(cpu->pad0);
        !           277:        cpu->sr = SWAP_SHORT(cpu->sr);
        !           278:        cpu->pc = SWAP_LONG(cpu->pc);
        !           279: }
        !           280: 
        !           281: void
        !           282: swap_m68k_thread_state_68882(
        !           283: struct m68k_thread_state_68882 *fpu,
        !           284: enum byte_sex target_byte_sex)
        !           285: {
        !           286:     unsigned long i, tmp;
        !           287: 
        !           288:        for(i = 0; i < 8; i++){
        !           289:                           tmp = SWAP_LONG(fpu->regs[i].fp[0]);
        !           290:            fpu->regs[i].fp[1] = SWAP_LONG(fpu->regs[i].fp[1]);
        !           291:            fpu->regs[i].fp[0] = SWAP_LONG(fpu->regs[i].fp[2]);
        !           292:            fpu->regs[i].fp[2] = tmp;
        !           293:        }
        !           294:        fpu->cr = SWAP_LONG(fpu->cr);
        !           295:        fpu->sr = SWAP_LONG(fpu->sr);
        !           296:        fpu->iar = SWAP_LONG(fpu->iar);
        !           297:        fpu->state = SWAP_LONG(fpu->state);
        !           298: }
        !           299: 
        !           300: void
        !           301: swap_m68k_thread_state_user_reg(
        !           302: struct m68k_thread_state_user_reg *user_reg,
        !           303: enum byte_sex target_byte_sex)
        !           304: {
        !           305:        user_reg->user_reg = SWAP_LONG(user_reg->user_reg);
        !           306: }
        !           307: 
        !           308: void
        !           309: swap_m98k_thread_state_grf_t(
        !           310: m98k_thread_state_grf_t *cpu,
        !           311: enum byte_sex target_byte_sex)
        !           312: {
        !           313:     enum byte_sex host_byte_sex;
        !           314: 
        !           315:     struct swapped_m98k_cr {
        !           316:        union {
        !           317:            struct {
        !           318:                unsigned rsvd:BITS_WIDTH(23,0);
        !           319:                unsigned ox:BIT_WIDTH(24);
        !           320:                unsigned vx:BIT_WIDTH(25);
        !           321:                unsigned fex:BIT_WIDTH(26);
        !           322:                unsigned fx:BIT_WIDTH(27);
        !           323:                unsigned so:BIT_WIDTH(28);
        !           324:                unsigned eq:BIT_WIDTH(29);
        !           325:                unsigned gt:BIT_WIDTH(30);
        !           326:                unsigned lt:BIT_WIDTH(31);
        !           327:            } fields;
        !           328:            unsigned long word;
        !           329:        } u;
        !           330:     } scr;
        !           331:     struct swapped_m98k_xer {
        !           332:        union {
        !           333:            struct {
        !           334:                unsigned byte_count:BITS_WIDTH(6,0);    
        !           335:                unsigned rsvd2:BIT_WIDTH(7);
        !           336:                unsigned byte:BITS_WIDTH(15,8);
        !           337:                unsigned rsvd1:BITS_WIDTH(28,16);
        !           338:                unsigned ca:BIT_WIDTH(29);
        !           339:                unsigned ov:BIT_WIDTH(30);
        !           340:                unsigned so:BIT_WIDTH(31);
        !           341:            } fields;
        !           342:            unsigned long word;
        !           343:        } u;
        !           344:     } sxer;
        !           345:     struct swapped_m98k_msr {
        !           346:        union {
        !           347:            struct {
        !           348:                unsigned psfr:BIT_WIDTH(0);
        !           349:                unsigned rsvd2:BITS_WIDTH(3,1);
        !           350:                unsigned dr:BIT_WIDTH(4);
        !           351:                unsigned ir:BIT_WIDTH(5);
        !           352:                unsigned ip:BIT_WIDTH(6);
        !           353:                unsigned rsvd1:BIT_WIDTH(7);
        !           354:                unsigned fe1:BIT_WIDTH(8);
        !           355:                unsigned be:BIT_WIDTH(9);
        !           356:                unsigned se:BIT_WIDTH(10);
        !           357:                unsigned fe0:BIT_WIDTH(11);
        !           358:                unsigned me:BIT_WIDTH(12);
        !           359:                unsigned fp:BIT_WIDTH(13);
        !           360:                unsigned pr:BIT_WIDTH(14);
        !           361:                unsigned ee:BIT_WIDTH(15);
        !           362:                unsigned rsvd3:BITS_WIDTH(31,16);
        !           363:            } fields;
        !           364:            unsigned long word;
        !           365:        } u;
        !           366:     } smsr;
        !           367: 
        !           368:        host_byte_sex = get_host_byte_sex();
        !           369: 
        !           370:        cpu->r0 = SWAP_LONG(cpu->r0);
        !           371:        cpu->r1 = SWAP_LONG(cpu->r1);
        !           372:        cpu->r2 = SWAP_LONG(cpu->r2);
        !           373:        cpu->r3 = SWAP_LONG(cpu->r3);
        !           374:        cpu->r4 = SWAP_LONG(cpu->r4);
        !           375:        cpu->r5 = SWAP_LONG(cpu->r5);
        !           376:        cpu->r6 = SWAP_LONG(cpu->r6);
        !           377:        cpu->r7 = SWAP_LONG(cpu->r7);
        !           378:        cpu->r8 = SWAP_LONG(cpu->r8);
        !           379:        cpu->r9 = SWAP_LONG(cpu->r9);
        !           380:        cpu->r10 = SWAP_LONG(cpu->r10);
        !           381:        cpu->r11 = SWAP_LONG(cpu->r11);
        !           382:        cpu->r12 = SWAP_LONG(cpu->r12);
        !           383:        cpu->r13 = SWAP_LONG(cpu->r13);
        !           384:        cpu->r14 = SWAP_LONG(cpu->r14);
        !           385:        cpu->r15 = SWAP_LONG(cpu->r15);
        !           386:        cpu->r16 = SWAP_LONG(cpu->r16);
        !           387:        cpu->r17 = SWAP_LONG(cpu->r17);
        !           388:        cpu->r18 = SWAP_LONG(cpu->r18);
        !           389:        cpu->r19 = SWAP_LONG(cpu->r19);
        !           390:        cpu->r20 = SWAP_LONG(cpu->r20);
        !           391:        cpu->r21 = SWAP_LONG(cpu->r21);
        !           392:        cpu->r22 = SWAP_LONG(cpu->r22);
        !           393:        cpu->r23 = SWAP_LONG(cpu->r23);
        !           394:        cpu->r24 = SWAP_LONG(cpu->r24);
        !           395:        cpu->r25 = SWAP_LONG(cpu->r25);
        !           396:        cpu->r26 = SWAP_LONG(cpu->r26);
        !           397:        cpu->r27 = SWAP_LONG(cpu->r27);
        !           398:        cpu->r28 = SWAP_LONG(cpu->r28);
        !           399:        cpu->r29 = SWAP_LONG(cpu->r29);
        !           400:        cpu->r30 = SWAP_LONG(cpu->r30);
        !           401:        cpu->r31 = SWAP_LONG(cpu->r31);
        !           402:        cpu->lr  = SWAP_LONG(cpu->lr);
        !           403:        cpu->ctr = SWAP_LONG(cpu->ctr);
        !           404:        cpu->cia = SWAP_LONG(cpu->cia);
        !           405: 
        !           406:        if(target_byte_sex == host_byte_sex){
        !           407:            memcpy(&scr, &(cpu->cr), sizeof(struct swapped_m98k_cr));
        !           408:            scr.u.word = SWAP_LONG(scr.u.word);
        !           409:            cpu->cr.lt = scr.u.fields.lt;
        !           410:            cpu->cr.gt = scr.u.fields.gt;
        !           411:            cpu->cr.eq = scr.u.fields.eq;
        !           412:            cpu->cr.so = scr.u.fields.so;
        !           413:            cpu->cr.fx = scr.u.fields.fx;
        !           414:            cpu->cr.fex = scr.u.fields.fex;
        !           415:            cpu->cr.vx = scr.u.fields.vx;
        !           416:            cpu->cr.ox = scr.u.fields.ox;
        !           417:            cpu->cr.rsvd = scr.u.fields.rsvd;
        !           418: 
        !           419:            memcpy(&sxer, &(cpu->xer), sizeof(struct swapped_m98k_xer));
        !           420:            sxer.u.word = SWAP_LONG(sxer.u.word);
        !           421:            cpu->xer.byte_count = sxer.u.fields.byte_count;
        !           422:            cpu->xer.rsvd2 = sxer.u.fields.rsvd2;
        !           423:            cpu->xer.byte = sxer.u.fields.byte;
        !           424:            cpu->xer.rsvd1 = sxer.u.fields.rsvd1;
        !           425:            cpu->xer.ca = sxer.u.fields.ca;
        !           426:            cpu->xer.ov = sxer.u.fields.ov;
        !           427:            cpu->xer.so = sxer.u.fields.so;
        !           428: 
        !           429:            memcpy(&smsr, &(cpu->msr), sizeof(struct swapped_m98k_msr));
        !           430:            smsr.u.word = SWAP_LONG(smsr.u.word);
        !           431:            cpu->msr.psfr = smsr.u.fields.psfr;
        !           432:            cpu->msr.rsvd2 = smsr.u.fields.rsvd2;
        !           433:            cpu->msr.dr = smsr.u.fields.dr;
        !           434:            cpu->msr.ir = smsr.u.fields.ir;
        !           435:            cpu->msr.ip = smsr.u.fields.ip;
        !           436:            cpu->msr.rsvd1 = smsr.u.fields.rsvd1;
        !           437:            cpu->msr.fe1 = smsr.u.fields.fe1;
        !           438:            cpu->msr.be = smsr.u.fields.be;
        !           439:            cpu->msr.se = smsr.u.fields.se;
        !           440:            cpu->msr.fe0 = smsr.u.fields.fe0;
        !           441:            cpu->msr.me = smsr.u.fields.me;
        !           442:            cpu->msr.fp = smsr.u.fields.fp;
        !           443:            cpu->msr.pr = smsr.u.fields.pr;
        !           444:            cpu->msr.ee = smsr.u.fields.ee;
        !           445:            cpu->msr.rsvd3 = smsr.u.fields.rsvd3;
        !           446:        }
        !           447:        else{
        !           448:            scr.u.fields.lt = cpu->cr.lt;
        !           449:            scr.u.fields.gt = cpu->cr.gt;
        !           450:            scr.u.fields.eq = cpu->cr.eq;
        !           451:            scr.u.fields.so = cpu->cr.so;
        !           452:            scr.u.fields.fx = cpu->cr.fx;
        !           453:            scr.u.fields.fex = cpu->cr.fex;
        !           454:            scr.u.fields.vx = cpu->cr.vx;
        !           455:            scr.u.fields.ox = cpu->cr.ox;
        !           456:            scr.u.fields.rsvd = cpu->cr.rsvd;
        !           457:            scr.u.word = SWAP_LONG(scr.u.word);
        !           458:            memcpy(&(cpu->cr), &scr, sizeof(struct swapped_m98k_cr));
        !           459: 
        !           460:            sxer.u.fields.byte_count = cpu->xer.byte_count;
        !           461:            sxer.u.fields.rsvd2 = cpu->xer.rsvd2;
        !           462:            sxer.u.fields.byte = cpu->xer.byte;
        !           463:            sxer.u.fields.rsvd1 = cpu->xer.rsvd1;
        !           464:            sxer.u.fields.ca = cpu->xer.ca;
        !           465:            sxer.u.fields.ov = cpu->xer.ov;
        !           466:            sxer.u.fields.so = cpu->xer.so;
        !           467:            sxer.u.word = SWAP_LONG(sxer.u.word);
        !           468:            memcpy(&(cpu->xer), &sxer, sizeof(struct swapped_m98k_xer));
        !           469: 
        !           470:            smsr.u.fields.psfr = cpu->msr.psfr;
        !           471:            smsr.u.fields.rsvd2 = cpu->msr.rsvd2;
        !           472:            smsr.u.fields.dr = cpu->msr.dr;
        !           473:            smsr.u.fields.ir = cpu->msr.ir;
        !           474:            smsr.u.fields.ip = cpu->msr.ip;
        !           475:            smsr.u.fields.rsvd1 = cpu->msr.rsvd1;
        !           476:            smsr.u.fields.fe1 = cpu->msr.fe1;
        !           477:            smsr.u.fields.be = cpu->msr.be;
        !           478:            smsr.u.fields.se = cpu->msr.se;
        !           479:            smsr.u.fields.fe0 = cpu->msr.fe0;
        !           480:            smsr.u.fields.me = cpu->msr.me;
        !           481:            smsr.u.fields.fp = cpu->msr.fp;
        !           482:            smsr.u.fields.pr = cpu->msr.pr;
        !           483:            smsr.u.fields.ee = cpu->msr.ee;
        !           484:            smsr.u.fields.rsvd3 = cpu->msr.rsvd3;
        !           485:            smsr.u.word = SWAP_LONG(smsr.u.word);
        !           486:            memcpy(&(cpu->msr), &smsr, sizeof(struct swapped_m98k_msr));
        !           487:        }
        !           488: }
        !           489: 
        !           490: void
        !           491: swap_m88k_thread_state_grf_t(
        !           492: m88k_thread_state_grf_t *cpu,
        !           493: enum byte_sex target_byte_sex)
        !           494: {
        !           495:        cpu->r1 = SWAP_LONG(cpu->r1);
        !           496:        cpu->r2 = SWAP_LONG(cpu->r2);
        !           497:        cpu->r3 = SWAP_LONG(cpu->r3);
        !           498:        cpu->r4 = SWAP_LONG(cpu->r4);
        !           499:        cpu->r5 = SWAP_LONG(cpu->r5);
        !           500:        cpu->r6 = SWAP_LONG(cpu->r6);
        !           501:        cpu->r7 = SWAP_LONG(cpu->r7);
        !           502:        cpu->r8 = SWAP_LONG(cpu->r8);
        !           503:        cpu->r9 = SWAP_LONG(cpu->r9);
        !           504:        cpu->r10 = SWAP_LONG(cpu->r10);
        !           505:        cpu->r11 = SWAP_LONG(cpu->r11);
        !           506:        cpu->r12 = SWAP_LONG(cpu->r12);
        !           507:        cpu->r13 = SWAP_LONG(cpu->r13);
        !           508:        cpu->r14 = SWAP_LONG(cpu->r14);
        !           509:        cpu->r15 = SWAP_LONG(cpu->r15);
        !           510:        cpu->r16 = SWAP_LONG(cpu->r16);
        !           511:        cpu->r17 = SWAP_LONG(cpu->r17);
        !           512:        cpu->r18 = SWAP_LONG(cpu->r18);
        !           513:        cpu->r19 = SWAP_LONG(cpu->r19);
        !           514:        cpu->r20 = SWAP_LONG(cpu->r20);
        !           515:        cpu->r21 = SWAP_LONG(cpu->r21);
        !           516:        cpu->r22 = SWAP_LONG(cpu->r22);
        !           517:        cpu->r23 = SWAP_LONG(cpu->r23);
        !           518:        cpu->r24 = SWAP_LONG(cpu->r24);
        !           519:        cpu->r25 = SWAP_LONG(cpu->r25);
        !           520:        cpu->r26 = SWAP_LONG(cpu->r26);
        !           521:        cpu->r27 = SWAP_LONG(cpu->r27);
        !           522:        cpu->r28 = SWAP_LONG(cpu->r28);
        !           523:        cpu->r29 = SWAP_LONG(cpu->r29);
        !           524:        cpu->r30 = SWAP_LONG(cpu->r30);
        !           525:        cpu->r31 = SWAP_LONG(cpu->r31);
        !           526:        cpu->xip = SWAP_LONG(cpu->xip);
        !           527:        cpu->xip_in_bd = SWAP_LONG(cpu->xip_in_bd);
        !           528:        cpu->nip = SWAP_LONG(cpu->nip);
        !           529: }
        !           530: 
        !           531: void
        !           532: swap_m88k_thread_state_xrf_t(
        !           533: m88k_thread_state_xrf_t *fpu,
        !           534: enum byte_sex target_byte_sex)
        !           535: {
        !           536:     enum byte_sex host_byte_sex;
        !           537: 
        !           538:     struct swapped_m88k_fpsr {
        !           539:        union {
        !           540:            struct {
        !           541:                unsigned        afinx:BIT_WIDTH(0);
        !           542:                unsigned        afovf:BIT_WIDTH(1);
        !           543:                unsigned        afunf:BIT_WIDTH(2);
        !           544:                unsigned        afdvz:BIT_WIDTH(3);
        !           545:                unsigned        afinv:BIT_WIDTH(4);
        !           546:                unsigned        :BITS_WIDTH(15,5);
        !           547:                unsigned        xmod:BIT_WIDTH(16);
        !           548:                unsigned        :BITS_WIDTH(31,17);
        !           549:            } fields;
        !           550:            unsigned long word;
        !           551:        } u;
        !           552:     } ssr;
        !           553:     struct swapped_m88k_fpcr {
        !           554:        union {
        !           555:            struct {
        !           556:                unsigned        efinx:BIT_WIDTH(0);
        !           557:                unsigned        efovf:BIT_WIDTH(1);
        !           558:                unsigned        efunf:BIT_WIDTH(2);
        !           559:                unsigned        efdvz:BIT_WIDTH(3);
        !           560:                unsigned        efinv:BIT_WIDTH(4);
        !           561:                unsigned        :BITS_WIDTH(13,5);
        !           562:                m88k_fpcr_rm_t  rm:BITS_WIDTH(15,14);
        !           563:                unsigned        :BITS_WIDTH(31,16);
        !           564:            } fields;
        !           565:            unsigned long word;
        !           566:        } u;
        !           567:     } scr;
        !           568: 
        !           569:        host_byte_sex = get_host_byte_sex();
        !           570: 
        !           571:        fpu->x1.x[0] = SWAP_LONG(fpu->x1.x[0]);
        !           572:        fpu->x1.x[1] = SWAP_LONG(fpu->x1.x[1]);
        !           573:        fpu->x1.x[2] = SWAP_LONG(fpu->x1.x[2]);
        !           574:        fpu->x1.x[3] = SWAP_LONG(fpu->x1.x[3]);
        !           575:        fpu->x2.x[0] = SWAP_LONG(fpu->x2.x[0]);
        !           576:        fpu->x2.x[1] = SWAP_LONG(fpu->x2.x[1]);
        !           577:        fpu->x2.x[2] = SWAP_LONG(fpu->x2.x[2]);
        !           578:        fpu->x2.x[3] = SWAP_LONG(fpu->x2.x[3]);
        !           579:        fpu->x3.x[0] = SWAP_LONG(fpu->x3.x[0]);
        !           580:        fpu->x3.x[1] = SWAP_LONG(fpu->x3.x[1]);
        !           581:        fpu->x3.x[2] = SWAP_LONG(fpu->x3.x[2]);
        !           582:        fpu->x3.x[3] = SWAP_LONG(fpu->x3.x[3]);
        !           583:        fpu->x4.x[0] = SWAP_LONG(fpu->x4.x[0]);
        !           584:        fpu->x4.x[1] = SWAP_LONG(fpu->x4.x[1]);
        !           585:        fpu->x4.x[2] = SWAP_LONG(fpu->x4.x[2]);
        !           586:        fpu->x4.x[3] = SWAP_LONG(fpu->x4.x[3]);
        !           587:        fpu->x5.x[0] = SWAP_LONG(fpu->x5.x[0]);
        !           588:        fpu->x5.x[1] = SWAP_LONG(fpu->x5.x[1]);
        !           589:        fpu->x5.x[2] = SWAP_LONG(fpu->x5.x[2]);
        !           590:        fpu->x5.x[3] = SWAP_LONG(fpu->x5.x[3]);
        !           591:        fpu->x6.x[0] = SWAP_LONG(fpu->x6.x[0]);
        !           592:        fpu->x6.x[1] = SWAP_LONG(fpu->x6.x[1]);
        !           593:        fpu->x6.x[2] = SWAP_LONG(fpu->x6.x[2]);
        !           594:        fpu->x6.x[3] = SWAP_LONG(fpu->x6.x[3]);
        !           595:        fpu->x7.x[0] = SWAP_LONG(fpu->x7.x[0]);
        !           596:        fpu->x7.x[1] = SWAP_LONG(fpu->x7.x[1]);
        !           597:        fpu->x7.x[2] = SWAP_LONG(fpu->x7.x[2]);
        !           598:        fpu->x7.x[3] = SWAP_LONG(fpu->x7.x[3]);
        !           599:        fpu->x8.x[0] = SWAP_LONG(fpu->x8.x[0]);
        !           600:        fpu->x8.x[1] = SWAP_LONG(fpu->x8.x[1]);
        !           601:        fpu->x8.x[2] = SWAP_LONG(fpu->x8.x[2]);
        !           602:        fpu->x8.x[3] = SWAP_LONG(fpu->x8.x[3]);
        !           603:        fpu->x9.x[0] = SWAP_LONG(fpu->x9.x[0]);
        !           604:        fpu->x9.x[1] = SWAP_LONG(fpu->x9.x[1]);
        !           605:        fpu->x9.x[2] = SWAP_LONG(fpu->x9.x[2]);
        !           606:        fpu->x9.x[3] = SWAP_LONG(fpu->x9.x[3]);
        !           607:        fpu->x10.x[0] = SWAP_LONG(fpu->x10.x[0]);
        !           608:        fpu->x10.x[1] = SWAP_LONG(fpu->x10.x[1]);
        !           609:        fpu->x10.x[2] = SWAP_LONG(fpu->x10.x[2]);
        !           610:        fpu->x10.x[3] = SWAP_LONG(fpu->x10.x[3]);
        !           611:        fpu->x11.x[0] = SWAP_LONG(fpu->x11.x[0]);
        !           612:        fpu->x11.x[1] = SWAP_LONG(fpu->x11.x[1]);
        !           613:        fpu->x11.x[2] = SWAP_LONG(fpu->x11.x[2]);
        !           614:        fpu->x11.x[3] = SWAP_LONG(fpu->x11.x[3]);
        !           615:        fpu->x12.x[0] = SWAP_LONG(fpu->x12.x[0]);
        !           616:        fpu->x12.x[1] = SWAP_LONG(fpu->x12.x[1]);
        !           617:        fpu->x12.x[2] = SWAP_LONG(fpu->x12.x[2]);
        !           618:        fpu->x12.x[3] = SWAP_LONG(fpu->x12.x[3]);
        !           619:        fpu->x13.x[0] = SWAP_LONG(fpu->x13.x[0]);
        !           620:        fpu->x13.x[1] = SWAP_LONG(fpu->x13.x[1]);
        !           621:        fpu->x13.x[2] = SWAP_LONG(fpu->x13.x[2]);
        !           622:        fpu->x13.x[3] = SWAP_LONG(fpu->x13.x[3]);
        !           623:        fpu->x14.x[0] = SWAP_LONG(fpu->x14.x[0]);
        !           624:        fpu->x14.x[1] = SWAP_LONG(fpu->x14.x[1]);
        !           625:        fpu->x14.x[2] = SWAP_LONG(fpu->x14.x[2]);
        !           626:        fpu->x14.x[3] = SWAP_LONG(fpu->x14.x[3]);
        !           627:        fpu->x15.x[0] = SWAP_LONG(fpu->x15.x[0]);
        !           628:        fpu->x15.x[1] = SWAP_LONG(fpu->x15.x[1]);
        !           629:        fpu->x15.x[2] = SWAP_LONG(fpu->x15.x[2]);
        !           630:        fpu->x15.x[3] = SWAP_LONG(fpu->x15.x[3]);
        !           631:        fpu->x16.x[0] = SWAP_LONG(fpu->x16.x[0]);
        !           632:        fpu->x16.x[1] = SWAP_LONG(fpu->x16.x[1]);
        !           633:        fpu->x16.x[2] = SWAP_LONG(fpu->x16.x[2]);
        !           634:        fpu->x16.x[3] = SWAP_LONG(fpu->x16.x[3]);
        !           635:        fpu->x17.x[0] = SWAP_LONG(fpu->x17.x[0]);
        !           636:        fpu->x17.x[1] = SWAP_LONG(fpu->x17.x[1]);
        !           637:        fpu->x17.x[2] = SWAP_LONG(fpu->x17.x[2]);
        !           638:        fpu->x17.x[3] = SWAP_LONG(fpu->x17.x[3]);
        !           639:        fpu->x18.x[0] = SWAP_LONG(fpu->x18.x[0]);
        !           640:        fpu->x18.x[1] = SWAP_LONG(fpu->x18.x[1]);
        !           641:        fpu->x18.x[2] = SWAP_LONG(fpu->x18.x[2]);
        !           642:        fpu->x18.x[3] = SWAP_LONG(fpu->x18.x[3]);
        !           643:        fpu->x19.x[0] = SWAP_LONG(fpu->x19.x[0]);
        !           644:        fpu->x19.x[1] = SWAP_LONG(fpu->x19.x[1]);
        !           645:        fpu->x19.x[2] = SWAP_LONG(fpu->x19.x[2]);
        !           646:        fpu->x19.x[3] = SWAP_LONG(fpu->x19.x[3]);
        !           647:        fpu->x20.x[0] = SWAP_LONG(fpu->x20.x[0]);
        !           648:        fpu->x20.x[1] = SWAP_LONG(fpu->x20.x[1]);
        !           649:        fpu->x20.x[2] = SWAP_LONG(fpu->x20.x[2]);
        !           650:        fpu->x20.x[3] = SWAP_LONG(fpu->x20.x[3]);
        !           651:        fpu->x21.x[0] = SWAP_LONG(fpu->x21.x[0]);
        !           652:        fpu->x21.x[1] = SWAP_LONG(fpu->x21.x[1]);
        !           653:        fpu->x21.x[2] = SWAP_LONG(fpu->x21.x[2]);
        !           654:        fpu->x21.x[3] = SWAP_LONG(fpu->x21.x[3]);
        !           655:        fpu->x22.x[0] = SWAP_LONG(fpu->x22.x[0]);
        !           656:        fpu->x22.x[1] = SWAP_LONG(fpu->x22.x[1]);
        !           657:        fpu->x22.x[2] = SWAP_LONG(fpu->x22.x[2]);
        !           658:        fpu->x22.x[3] = SWAP_LONG(fpu->x22.x[3]);
        !           659:        fpu->x23.x[0] = SWAP_LONG(fpu->x23.x[0]);
        !           660:        fpu->x23.x[1] = SWAP_LONG(fpu->x23.x[1]);
        !           661:        fpu->x23.x[2] = SWAP_LONG(fpu->x23.x[2]);
        !           662:        fpu->x23.x[3] = SWAP_LONG(fpu->x23.x[3]);
        !           663:        fpu->x24.x[0] = SWAP_LONG(fpu->x24.x[0]);
        !           664:        fpu->x24.x[1] = SWAP_LONG(fpu->x24.x[1]);
        !           665:        fpu->x24.x[2] = SWAP_LONG(fpu->x24.x[2]);
        !           666:        fpu->x24.x[3] = SWAP_LONG(fpu->x24.x[3]);
        !           667:        fpu->x25.x[0] = SWAP_LONG(fpu->x25.x[0]);
        !           668:        fpu->x25.x[1] = SWAP_LONG(fpu->x25.x[1]);
        !           669:        fpu->x25.x[2] = SWAP_LONG(fpu->x25.x[2]);
        !           670:        fpu->x25.x[3] = SWAP_LONG(fpu->x25.x[3]);
        !           671:        fpu->x26.x[0] = SWAP_LONG(fpu->x26.x[0]);
        !           672:        fpu->x26.x[1] = SWAP_LONG(fpu->x26.x[1]);
        !           673:        fpu->x26.x[2] = SWAP_LONG(fpu->x26.x[2]);
        !           674:        fpu->x26.x[3] = SWAP_LONG(fpu->x26.x[3]);
        !           675:        fpu->x27.x[0] = SWAP_LONG(fpu->x27.x[0]);
        !           676:        fpu->x27.x[1] = SWAP_LONG(fpu->x27.x[1]);
        !           677:        fpu->x27.x[2] = SWAP_LONG(fpu->x27.x[2]);
        !           678:        fpu->x27.x[3] = SWAP_LONG(fpu->x27.x[3]);
        !           679:        fpu->x28.x[0] = SWAP_LONG(fpu->x28.x[0]);
        !           680:        fpu->x28.x[1] = SWAP_LONG(fpu->x28.x[1]);
        !           681:        fpu->x28.x[2] = SWAP_LONG(fpu->x28.x[2]);
        !           682:        fpu->x28.x[3] = SWAP_LONG(fpu->x28.x[3]);
        !           683:        fpu->x29.x[0] = SWAP_LONG(fpu->x29.x[0]);
        !           684:        fpu->x29.x[1] = SWAP_LONG(fpu->x29.x[1]);
        !           685:        fpu->x29.x[2] = SWAP_LONG(fpu->x29.x[2]);
        !           686:        fpu->x29.x[3] = SWAP_LONG(fpu->x29.x[3]);
        !           687:        fpu->x30.x[0] = SWAP_LONG(fpu->x30.x[0]);
        !           688:        fpu->x30.x[1] = SWAP_LONG(fpu->x30.x[1]);
        !           689:        fpu->x30.x[2] = SWAP_LONG(fpu->x30.x[2]);
        !           690:        fpu->x30.x[3] = SWAP_LONG(fpu->x30.x[3]);
        !           691:        fpu->x31.x[0] = SWAP_LONG(fpu->x31.x[0]);
        !           692:        fpu->x31.x[1] = SWAP_LONG(fpu->x31.x[1]);
        !           693:        fpu->x31.x[2] = SWAP_LONG(fpu->x31.x[2]);
        !           694:        fpu->x31.x[3] = SWAP_LONG(fpu->x31.x[3]);
        !           695: 
        !           696:        if(target_byte_sex == host_byte_sex){
        !           697:            memcpy(&ssr, &(fpu->fpsr), sizeof(struct swapped_m88k_fpsr));
        !           698:            ssr.u.word = SWAP_LONG(ssr.u.word);
        !           699:            fpu->fpsr.afinx = ssr.u.fields.afinx;
        !           700:            fpu->fpsr.afovf = ssr.u.fields.afovf;
        !           701:            fpu->fpsr.afunf = ssr.u.fields.afunf;
        !           702:            fpu->fpsr.afdvz = ssr.u.fields.afdvz;
        !           703:            fpu->fpsr.afinv = ssr.u.fields.afinv;
        !           704:            fpu->fpsr.xmod = ssr.u.fields.xmod;
        !           705: 
        !           706:            memcpy(&scr, &(fpu->fpcr), sizeof(struct swapped_m88k_fpcr));
        !           707:            scr.u.word = SWAP_LONG(scr.u.word);
        !           708:            fpu->fpcr.efinx = scr.u.fields.efinx;
        !           709:            fpu->fpcr.efovf = scr.u.fields.efovf;
        !           710:            fpu->fpcr.efunf = scr.u.fields.efunf;
        !           711:            fpu->fpcr.efdvz = scr.u.fields.efdvz;
        !           712:            fpu->fpcr.efinv = scr.u.fields.efinv;
        !           713:            fpu->fpcr.rm = scr.u.fields.rm;
        !           714:        }
        !           715:        else{
        !           716:            ssr.u.fields.afinx = fpu->fpsr.afinx;
        !           717:            ssr.u.fields.afovf = fpu->fpsr.afovf;
        !           718:            ssr.u.fields.afunf = fpu->fpsr.afunf;
        !           719:            ssr.u.fields.afdvz = fpu->fpsr.afdvz;
        !           720:            ssr.u.fields.afinv = fpu->fpsr.afinv;
        !           721:            ssr.u.fields.xmod = fpu->fpsr.xmod;
        !           722:            ssr.u.word = SWAP_LONG(ssr.u.word);
        !           723:            memcpy(&(fpu->fpsr), &ssr, sizeof(struct swapped_m88k_fpsr));
        !           724: 
        !           725:            scr.u.fields.efinx = fpu->fpcr.efinx;
        !           726:            scr.u.fields.efovf = fpu->fpcr.efovf;
        !           727:            scr.u.fields.efunf = fpu->fpcr.efunf;
        !           728:            scr.u.fields.efdvz = fpu->fpcr.efdvz;
        !           729:            scr.u.fields.efinv = fpu->fpcr.efinv;
        !           730:            scr.u.fields.rm = fpu->fpcr.rm;
        !           731:            scr.u.word = SWAP_LONG(scr.u.word);
        !           732:            memcpy(&(fpu->fpcr), &scr, sizeof(struct swapped_m88k_fpcr));
        !           733:        }
        !           734: }
        !           735: 
        !           736: void
        !           737: swap_m88k_thread_state_user_t(
        !           738: m88k_thread_state_user_t *user,
        !           739: enum byte_sex target_byte_sex)
        !           740: {
        !           741:        user->user = SWAP_LONG(user->user);
        !           742: }
        !           743: 
        !           744: void
        !           745: swap_m88110_thread_state_impl_t(
        !           746: m88110_thread_state_impl_t *spu,
        !           747: enum byte_sex target_byte_sex)
        !           748: {
        !           749:     unsigned long i;
        !           750:     enum byte_sex host_byte_sex;
        !           751: 
        !           752:     struct swapped_m88110_bp_ctrl {
        !           753:        union {
        !           754:            struct {
        !           755:                unsigned        v:BIT_WIDTH(0);
        !           756:                m88110_match_t  addr_match:BITS_WIDTH(12,1);
        !           757:                unsigned        :BITS_WIDTH(26,13);
        !           758:                unsigned        rwm:BIT_WIDTH(27);
        !           759:                unsigned        rw:BIT_WIDTH(28);
        !           760:                unsigned        :BITS_WIDTH(31,29);
        !           761:            } fields;
        !           762:            unsigned long word;
        !           763:        } u;
        !           764:     } sbpc;
        !           765: 
        !           766:     struct swap_m88110_psr {
        !           767:        union {
        !           768:            struct {
        !           769:                unsigned        :BITS_WIDTH(1,0);
        !           770:                unsigned        mxm_dis:BIT_WIDTH(2);
        !           771:                unsigned        sfu1dis:BIT_WIDTH(3);
        !           772:                unsigned        :BITS_WIDTH(22,4);
        !           773:                unsigned        trace:BIT_WIDTH(23);
        !           774:                unsigned        :BIT_WIDTH(24);
        !           775:                unsigned        sm:BIT_WIDTH(25);
        !           776:                unsigned        sgn_imd:BIT_WIDTH(26);
        !           777:                unsigned        :BIT_WIDTH(27);
        !           778:                unsigned        c:BIT_WIDTH(28);
        !           779:                unsigned        se:BIT_WIDTH(29);
        !           780:                unsigned        le:BIT_WIDTH(30);
        !           781:                unsigned        supr:BIT_WIDTH(31);
        !           782:            } fields;
        !           783:            unsigned long word;
        !           784:        } u;
        !           785:     } spsr;
        !           786: 
        !           787:     struct swapped_m88110_fp_trap_status {
        !           788:        union {
        !           789:            struct {
        !           790:                unsigned        efinx:BIT_WIDTH(0);
        !           791:                unsigned        efovf:BIT_WIDTH(1);
        !           792:                unsigned        efunf:BIT_WIDTH(2);
        !           793:                unsigned        efdvz:BIT_WIDTH(3);
        !           794:                unsigned        efinv:BIT_WIDTH(4);
        !           795:                unsigned        priv:BIT_WIDTH(5);
        !           796:                unsigned        unimp:BIT_WIDTH(6);
        !           797:                unsigned        int:BIT_WIDTH(7);
        !           798:                unsigned        sfu1_disabled:BIT_WIDTH(8);
        !           799:                unsigned        :BITS_WIDTH(13,9);
        !           800:                m88110_iresult_size_t   iresult_size:BITS_WIDTH(15,14);
        !           801:                unsigned        :BITS_WIDTH(31,16);
        !           802:            } fields;
        !           803:            unsigned long word;
        !           804:        } u;
        !           805:     } sfps;
        !           806: 
        !           807:        host_byte_sex = get_host_byte_sex();
        !           808: 
        !           809:        if(target_byte_sex == host_byte_sex){
        !           810:            for(i = 0; i < M88110_N_DATA_BP; i++){
        !           811:                spu->data_bp[i].addr = SWAP_LONG(spu->data_bp[i].addr);
        !           812:                memcpy(&sbpc, &(spu->data_bp[i].ctrl),
        !           813:                       sizeof(struct swapped_m88110_bp_ctrl));
        !           814:                sbpc.u.word = SWAP_LONG(sbpc.u.word);
        !           815:                spu->data_bp[i].ctrl.v = sbpc.u.fields.v;
        !           816:                spu->data_bp[i].ctrl.addr_match = sbpc.u.fields.addr_match;
        !           817:                spu->data_bp[i].ctrl.rwm = sbpc.u.fields.rwm;
        !           818:                spu->data_bp[i].ctrl.rw = sbpc.u.fields.rw;
        !           819:            }
        !           820: 
        !           821:            memcpy(&spsr, &(spu->psr), sizeof(struct swap_m88110_psr));
        !           822:            spsr.u.word = SWAP_LONG(spsr.u.word);
        !           823:            spu->psr.mxm_dis = spsr.u.fields.mxm_dis;
        !           824:            spu->psr.sfu1dis = spsr.u.fields.sfu1dis;
        !           825:            spu->psr.trace = spsr.u.fields.trace;
        !           826:            spu->psr.sm = spsr.u.fields.sm;
        !           827:            spu->psr.sgn_imd = spsr.u.fields.sgn_imd;
        !           828:            spu->psr.c = spsr.u.fields.c;
        !           829:            spu->psr.se = spsr.u.fields.se;
        !           830:            spu->psr.le = spsr.u.fields.le;
        !           831:            spu->psr.supr = spsr.u.fields.supr;
        !           832: 
        !           833:            memcpy(&sfps, &(spu->fp_trap_status),
        !           834:                   sizeof(struct swapped_m88110_fp_trap_status));
        !           835:            sfps.u.word = SWAP_LONG(sfps.u.word);
        !           836:            spu->fp_trap_status.efinx = sfps.u.fields.efinx;
        !           837:            spu->fp_trap_status.efovf = sfps.u.fields.efovf;
        !           838:            spu->fp_trap_status.efunf = sfps.u.fields.efunf;
        !           839:            spu->fp_trap_status.efdvz = sfps.u.fields.efdvz;
        !           840:            spu->fp_trap_status.efinv = sfps.u.fields.efinv;
        !           841:            spu->fp_trap_status.priv = sfps.u.fields.priv;
        !           842:            spu->fp_trap_status.unimp = sfps.u.fields.unimp;
        !           843:            spu->fp_trap_status.sfu1_disabled = sfps.u.fields.sfu1_disabled;
        !           844:            spu->fp_trap_status.iresult_size = sfps.u.fields.iresult_size;
        !           845:        }
        !           846:        else{
        !           847:            for(i = 0; i < M88110_N_DATA_BP; i++){
        !           848:                spu->data_bp[i].addr = SWAP_LONG(spu->data_bp[i].addr);
        !           849:                sbpc.u.fields.v = spu->data_bp[i].ctrl.v;
        !           850:                sbpc.u.fields.addr_match = spu->data_bp[i].ctrl.addr_match;
        !           851:                sbpc.u.fields.rwm = spu->data_bp[i].ctrl.rwm;
        !           852:                sbpc.u.fields.rw = spu->data_bp[i].ctrl.rw;
        !           853:                sbpc.u.word = SWAP_LONG(sbpc.u.word);
        !           854:                memcpy(&(spu->data_bp[i].ctrl), &sbpc,
        !           855:                       sizeof(struct swapped_m88110_bp_ctrl));
        !           856:            }
        !           857: 
        !           858:            spsr.u.fields.mxm_dis = spu->psr.mxm_dis;
        !           859:            spsr.u.fields.sfu1dis = spu->psr.sfu1dis;
        !           860:            spsr.u.fields.trace = spu->psr.trace;
        !           861:            spsr.u.fields.sm = spu->psr.sm;
        !           862:            spsr.u.fields.sgn_imd = spu->psr.sgn_imd;
        !           863:            spsr.u.fields.c = spu->psr.c;
        !           864:            spsr.u.fields.se = spu->psr.se;
        !           865:            spsr.u.fields.le = spu->psr.le;
        !           866:            spsr.u.fields.supr = spu->psr.supr;
        !           867:            spsr.u.word = SWAP_LONG(spsr.u.word);
        !           868:            memcpy(&(spu->psr), &spsr, sizeof(struct swap_m88110_psr));
        !           869: 
        !           870:            sfps.u.fields.efinx = spu->fp_trap_status.efinx;
        !           871:            sfps.u.fields.efovf = spu->fp_trap_status.efovf;
        !           872:            sfps.u.fields.efunf = spu->fp_trap_status.efunf;
        !           873:            sfps.u.fields.efdvz = spu->fp_trap_status.efdvz;
        !           874:            sfps.u.fields.efinv = spu->fp_trap_status.efinv;
        !           875:            sfps.u.fields.priv = spu->fp_trap_status.priv;
        !           876:            sfps.u.fields.unimp = spu->fp_trap_status.unimp;
        !           877:            sfps.u.fields.sfu1_disabled = spu->fp_trap_status.sfu1_disabled;
        !           878:            sfps.u.fields.iresult_size = spu->fp_trap_status.iresult_size;
        !           879:            sfps.u.word = SWAP_LONG(sfps.u.word);
        !           880:            memcpy(&(spu->fp_trap_status), &sfps,
        !           881:                   sizeof(struct swapped_m88110_fp_trap_status));
        !           882:        }
        !           883:        spu->intermediate_result.x[0] =
        !           884:            SWAP_LONG(spu->intermediate_result.x[0]);
        !           885:        spu->intermediate_result.x[1] =
        !           886:            SWAP_LONG(spu->intermediate_result.x[1]);
        !           887:        spu->intermediate_result.x[2] =
        !           888:            SWAP_LONG(spu->intermediate_result.x[2]);
        !           889:        spu->intermediate_result.x[3] =
        !           890:            SWAP_LONG(spu->intermediate_result.x[3]);
        !           891: }
        !           892: 
        !           893: void
        !           894: swap_i860_thread_state_regs(
        !           895: struct i860_thread_state_regs *cpu,
        !           896: enum byte_sex target_byte_sex)
        !           897: {
        !           898:     unsigned long i;
        !           899: 
        !           900:        for(i = 0; i < 31; i++)
        !           901:            cpu->ireg[i] = SWAP_LONG(cpu->ireg[i]);
        !           902:        for(i = 0; i < 30; i++)
        !           903:            cpu->freg[i] = SWAP_LONG(cpu->freg[i]);
        !           904:        cpu->psr = SWAP_LONG(cpu->psr);
        !           905:        cpu->epsr = SWAP_LONG(cpu->epsr);
        !           906:        cpu->db = SWAP_LONG(cpu->db);
        !           907:        cpu->pc = SWAP_LONG(cpu->pc);
        !           908:        cpu->_padding_ = SWAP_LONG(cpu->_padding_);
        !           909:        cpu->Mres3 = SWAP_DOUBLE(cpu->Mres3);
        !           910:        cpu->Ares3 = SWAP_DOUBLE(cpu->Ares3);
        !           911:        cpu->Mres2 = SWAP_DOUBLE(cpu->Mres2);
        !           912:        cpu->Ares2 = SWAP_DOUBLE(cpu->Ares2);
        !           913:        cpu->Mres1 = SWAP_DOUBLE(cpu->Mres1);
        !           914:        cpu->Ares1 = SWAP_DOUBLE(cpu->Ares1);
        !           915:        cpu->Ires1 = SWAP_DOUBLE(cpu->Ires1);
        !           916:        cpu->Lres3m = SWAP_DOUBLE(cpu->Lres3m);
        !           917:        cpu->Lres2m = SWAP_DOUBLE(cpu->Lres2m);
        !           918:        cpu->Lres1m = SWAP_DOUBLE(cpu->Lres1m);
        !           919:        cpu->KR = SWAP_DOUBLE(cpu->KR);
        !           920:        cpu->KI = SWAP_DOUBLE(cpu->KI);
        !           921:        cpu->T = SWAP_DOUBLE(cpu->T);
        !           922:        cpu->Fsr3 = SWAP_LONG(cpu->Fsr3);
        !           923:        cpu->Fsr2 = SWAP_LONG(cpu->Fsr2);
        !           924:        cpu->Fsr1 = SWAP_LONG(cpu->Fsr1);
        !           925:        cpu->Mergelo32 = SWAP_LONG(cpu->Mergelo32);
        !           926:        cpu->Mergehi32 = SWAP_LONG(cpu->Mergehi32);
        !           927: }
        !           928: 
        !           929: void
        !           930: swap_i386_thread_state(
        !           931: i386_thread_state_t *cpu,
        !           932: enum byte_sex target_byte_sex)
        !           933: {
        !           934:        cpu->eax = SWAP_LONG(cpu->eax);
        !           935:        cpu->ebx = SWAP_LONG(cpu->ebx);
        !           936:        cpu->ecx = SWAP_LONG(cpu->ecx);
        !           937:        cpu->edx = SWAP_LONG(cpu->edx);
        !           938:        cpu->edi = SWAP_LONG(cpu->edi);
        !           939:        cpu->esi = SWAP_LONG(cpu->esi);
        !           940:        cpu->ebp = SWAP_LONG(cpu->ebp);
        !           941:        cpu->esp = SWAP_LONG(cpu->esp);
        !           942:        cpu->ss = SWAP_LONG(cpu->ss);
        !           943:        cpu->eflags = SWAP_LONG(cpu->eflags);
        !           944:        cpu->eip = SWAP_LONG(cpu->eip);
        !           945:        cpu->cs = SWAP_LONG(cpu->cs);
        !           946:        cpu->ds = SWAP_LONG(cpu->ds);
        !           947:        cpu->es = SWAP_LONG(cpu->es);
        !           948:        cpu->fs = SWAP_LONG(cpu->fs);
        !           949:        cpu->gs = SWAP_LONG(cpu->gs);
        !           950: }
        !           951: 
        !           952: void
        !           953: swap_i386_thread_fpstate(
        !           954: i386_thread_fpstate_t *fpu,
        !           955: enum byte_sex target_byte_sex)
        !           956: {
        !           957:     struct swapped_fp_control {
        !           958:        union {
        !           959:            struct {
        !           960:                unsigned short
        !           961:                            :3,
        !           962:                    /*inf*/ :1,
        !           963:                    rc      :2,
        !           964:                    pc      :2,
        !           965:                            :2,
        !           966:                    precis  :1,
        !           967:                    undfl   :1,
        !           968:                    ovrfl   :1,
        !           969:                    zdiv    :1,
        !           970:                    denorm  :1,
        !           971:                    invalid :1;
        !           972:            } fields;
        !           973:            unsigned short half;
        !           974:        } u;
        !           975:     } sfpc;
        !           976: 
        !           977:     struct swapped_fp_status {
        !           978:        union {
        !           979:            struct {
        !           980:                unsigned short
        !           981:                    busy    :1,
        !           982:                    c3      :1,
        !           983:                    tos     :3,
        !           984:                    c2      :1,
        !           985:                    c1      :1,
        !           986:                    c0      :1,
        !           987:                    errsumm :1,
        !           988:                    stkflt  :1,
        !           989:                    precis  :1,
        !           990:                    undfl   :1,
        !           991:                    ovrfl   :1,
        !           992:                    zdiv    :1,
        !           993:                    denorm  :1,
        !           994:                    invalid :1;
        !           995:            } fields;
        !           996:            unsigned short half;
        !           997:        } u;
        !           998:     } sfps;
        !           999: 
        !          1000:     struct swapped_fp_tag {
        !          1001:        union {
        !          1002:            struct {
        !          1003:                unsigned short
        !          1004:                    tag7 :2,
        !          1005:                    tag6 :2,
        !          1006:                    tag5 :2,
        !          1007:                    tag4 :2,
        !          1008:                    tag3 :2,
        !          1009:                    tag2 :2,
        !          1010:                    tag1 :2,
        !          1011:                    tag0 :2;
        !          1012:            } fields;
        !          1013:            unsigned short half;
        !          1014:        } u;
        !          1015:     } sfpt;
        !          1016: 
        !          1017:     struct swapped_fp_data_reg {
        !          1018:        unsigned short mant;
        !          1019:        unsigned short mant1 :16,
        !          1020:                       mant2 :16,
        !          1021:                       mant3 :16;
        !          1022:        union {
        !          1023:            struct {
        !          1024:                unsigned short sign :1,
        !          1025:                               exp  :15;
        !          1026:            } fields;
        !          1027:            unsigned short half;
        !          1028:        } u;
        !          1029:     } sfpd;
        !          1030: 
        !          1031:     struct swapped_sel {
        !          1032:        union {
        !          1033:            struct {
        !          1034:                unsigned short
        !          1035:                    index :13,
        !          1036:                    ti    :1,
        !          1037:                    rpl   :2;
        !          1038:            } fields;
        !          1039:            unsigned short half;
        !          1040:        } u;
        !          1041:     } ss;
        !          1042: 
        !          1043:     enum byte_sex host_byte_sex;
        !          1044:     unsigned long i;
        !          1045: 
        !          1046:        host_byte_sex = get_host_byte_sex();
        !          1047: 
        !          1048:        fpu->environ.ip = SWAP_LONG(fpu->environ.ip);
        !          1049:        fpu->environ.opcode = SWAP_SHORT(fpu->environ.opcode);
        !          1050:        fpu->environ.dp = SWAP_LONG(fpu->environ.dp);
        !          1051: 
        !          1052:        if(target_byte_sex == host_byte_sex){
        !          1053:            memcpy(&sfpc, &(fpu->environ.control),
        !          1054:                   sizeof(struct swapped_fp_control));
        !          1055:            sfpc.u.half = SWAP_SHORT(sfpc.u.half);
        !          1056:            fpu->environ.control.rc = sfpc.u.fields.rc;
        !          1057:            fpu->environ.control.pc = sfpc.u.fields.pc;
        !          1058:            fpu->environ.control.precis = sfpc.u.fields.precis;
        !          1059:            fpu->environ.control.undfl = sfpc.u.fields.undfl;
        !          1060:            fpu->environ.control.ovrfl = sfpc.u.fields.ovrfl;
        !          1061:            fpu->environ.control.zdiv = sfpc.u.fields.zdiv;
        !          1062:            fpu->environ.control.denorm = sfpc.u.fields.denorm;
        !          1063:            fpu->environ.control.invalid = sfpc.u.fields.invalid;
        !          1064: 
        !          1065:            memcpy(&sfps, &(fpu->environ.status),
        !          1066:                   sizeof(struct swapped_fp_status));
        !          1067:            sfps.u.half = SWAP_SHORT(sfps.u.half);
        !          1068:            fpu->environ.status.busy = sfps.u.fields.busy;
        !          1069:            fpu->environ.status.c3 = sfps.u.fields.c3;
        !          1070:            fpu->environ.status.tos = sfps.u.fields.tos;
        !          1071:            fpu->environ.status.c2 = sfps.u.fields.c2;
        !          1072:            fpu->environ.status.c1 = sfps.u.fields.c1;
        !          1073:            fpu->environ.status.c0 = sfps.u.fields.c0;
        !          1074:            fpu->environ.status.errsumm = sfps.u.fields.errsumm;
        !          1075:            fpu->environ.status.stkflt = sfps.u.fields.stkflt;
        !          1076:            fpu->environ.status.precis = sfps.u.fields.precis;
        !          1077:            fpu->environ.status.undfl = sfps.u.fields.undfl;
        !          1078:            fpu->environ.status.ovrfl = sfps.u.fields.ovrfl;
        !          1079:            fpu->environ.status.zdiv = sfps.u.fields.zdiv;
        !          1080:            fpu->environ.status.denorm = sfps.u.fields.denorm;
        !          1081:            fpu->environ.status.invalid = sfps.u.fields.invalid;
        !          1082: 
        !          1083:            memcpy(&sfpt, &(fpu->environ.tag),
        !          1084:                   sizeof(struct swapped_fp_tag));
        !          1085:            sfpt.u.half = SWAP_SHORT(sfpt.u.half);
        !          1086:            fpu->environ.tag.tag7 = sfpt.u.fields.tag7;
        !          1087:            fpu->environ.tag.tag6 = sfpt.u.fields.tag6;
        !          1088:            fpu->environ.tag.tag5 = sfpt.u.fields.tag5;
        !          1089:            fpu->environ.tag.tag4 = sfpt.u.fields.tag4;
        !          1090:            fpu->environ.tag.tag3 = sfpt.u.fields.tag3;
        !          1091:            fpu->environ.tag.tag2 = sfpt.u.fields.tag2;
        !          1092:            fpu->environ.tag.tag1 = sfpt.u.fields.tag1;
        !          1093:            fpu->environ.tag.tag0 = sfpt.u.fields.tag0;
        !          1094: 
        !          1095:            memcpy(&ss, &(fpu->environ.cs),
        !          1096:                   sizeof(struct swapped_sel));
        !          1097:            ss.u.half = SWAP_SHORT(ss.u.half);
        !          1098:            fpu->environ.cs.index = ss.u.fields.index;
        !          1099:            fpu->environ.cs.ti = ss.u.fields.ti;
        !          1100:            fpu->environ.cs.rpl = ss.u.fields.rpl;
        !          1101: 
        !          1102:            memcpy(&ss, &(fpu->environ.ds),
        !          1103:                   sizeof(struct swapped_sel));
        !          1104:            ss.u.half = SWAP_SHORT(ss.u.half);
        !          1105:            fpu->environ.ds.index = ss.u.fields.index;
        !          1106:            fpu->environ.ds.ti = ss.u.fields.ti;
        !          1107:            fpu->environ.ds.rpl = ss.u.fields.rpl;
        !          1108:        
        !          1109:            for(i = 0; i < 8; i++){
        !          1110:                memcpy(&sfpd, &(fpu->stack.ST[i]),
        !          1111:                       sizeof(struct swapped_fp_data_reg));
        !          1112:                fpu->stack.ST[i].mant = SWAP_SHORT(sfpd.mant);
        !          1113:                fpu->stack.ST[i].mant1 = SWAP_SHORT(sfpd.mant1);
        !          1114:                fpu->stack.ST[i].mant2 = SWAP_SHORT(sfpd.mant2);
        !          1115:                fpu->stack.ST[i].mant3 = SWAP_SHORT(sfpd.mant3);
        !          1116:                sfpd.u.half = SWAP_SHORT(sfpd.u.half);
        !          1117:                fpu->stack.ST[i].exp = sfpd.u.fields.exp;
        !          1118:                fpu->stack.ST[i].sign = sfpd.u.fields.sign;
        !          1119:            }
        !          1120:        }
        !          1121:        else{
        !          1122:            sfpc.u.fields.rc = fpu->environ.control.rc;
        !          1123:            sfpc.u.fields.pc = fpu->environ.control.pc;
        !          1124:            sfpc.u.fields.precis = fpu->environ.control.precis;
        !          1125:            sfpc.u.fields.undfl = fpu->environ.control.undfl;
        !          1126:            sfpc.u.fields.ovrfl = fpu->environ.control.ovrfl;
        !          1127:            sfpc.u.fields.zdiv = fpu->environ.control.zdiv;
        !          1128:            sfpc.u.fields.denorm = fpu->environ.control.denorm;
        !          1129:            sfpc.u.fields.invalid = fpu->environ.control.invalid;
        !          1130:            sfpc.u.half = SWAP_SHORT(sfpc.u.half);
        !          1131:            memcpy(&(fpu->environ.control), &sfpc,
        !          1132:                   sizeof(struct swapped_fp_control));
        !          1133: 
        !          1134:            sfps.u.fields.busy = fpu->environ.status.busy;
        !          1135:            sfps.u.fields.c3 = fpu->environ.status.c3;
        !          1136:            sfps.u.fields.tos = fpu->environ.status.tos;
        !          1137:            sfps.u.fields.c2 = fpu->environ.status.c2;
        !          1138:            sfps.u.fields.c1 = fpu->environ.status.c1;
        !          1139:            sfps.u.fields.c0 = fpu->environ.status.c0;
        !          1140:            sfps.u.fields.errsumm = fpu->environ.status.errsumm;
        !          1141:            sfps.u.fields.stkflt = fpu->environ.status.stkflt;
        !          1142:            sfps.u.fields.precis = fpu->environ.status.precis;
        !          1143:            sfps.u.fields.undfl = fpu->environ.status.undfl;
        !          1144:            sfps.u.fields.ovrfl = fpu->environ.status.ovrfl;
        !          1145:            sfps.u.fields.zdiv = fpu->environ.status.zdiv;
        !          1146:            sfps.u.fields.denorm = fpu->environ.status.denorm;
        !          1147:            sfps.u.fields.invalid = fpu->environ.status.invalid;
        !          1148:            sfps.u.half = SWAP_SHORT(sfps.u.half);
        !          1149:            memcpy(&(fpu->environ.status), &sfps,
        !          1150:                   sizeof(struct swapped_fp_status));
        !          1151: 
        !          1152:            sfpt.u.fields.tag7 = fpu->environ.tag.tag7;
        !          1153:            sfpt.u.fields.tag6 = fpu->environ.tag.tag6;
        !          1154:            sfpt.u.fields.tag5 = fpu->environ.tag.tag5;
        !          1155:            sfpt.u.fields.tag4 = fpu->environ.tag.tag4;
        !          1156:            sfpt.u.fields.tag3 = fpu->environ.tag.tag3;
        !          1157:            sfpt.u.fields.tag2 = fpu->environ.tag.tag2;
        !          1158:            sfpt.u.fields.tag1 = fpu->environ.tag.tag1;
        !          1159:            sfpt.u.fields.tag0 = fpu->environ.tag.tag0;
        !          1160:            sfpt.u.half = SWAP_SHORT(sfpt.u.half);
        !          1161:            memcpy(&(fpu->environ.tag), &sfpt,
        !          1162:                   sizeof(struct swapped_fp_tag));
        !          1163: 
        !          1164:            ss.u.fields.index = fpu->environ.cs.index;
        !          1165:            ss.u.fields.ti = fpu->environ.cs.ti;
        !          1166:            ss.u.fields.rpl = fpu->environ.cs.rpl;
        !          1167:            ss.u.half = SWAP_SHORT(ss.u.half);
        !          1168:            memcpy(&(fpu->environ.cs), &ss,
        !          1169:                   sizeof(struct swapped_sel));
        !          1170: 
        !          1171:            ss.u.fields.index = fpu->environ.ds.index;
        !          1172:            ss.u.fields.ti = fpu->environ.ds.ti;
        !          1173:            ss.u.fields.rpl = fpu->environ.ds.rpl;
        !          1174:            ss.u.half = SWAP_SHORT(ss.u.half);
        !          1175:            memcpy(&(fpu->environ.cs), &ss,
        !          1176:                   sizeof(struct swapped_sel));
        !          1177: 
        !          1178:            for(i = 0; i < 8; i++){
        !          1179:                sfpd.mant = SWAP_SHORT(fpu->stack.ST[i].mant);
        !          1180:                sfpd.mant1 = SWAP_SHORT(fpu->stack.ST[i].mant1);
        !          1181:                sfpd.mant2 = SWAP_SHORT(fpu->stack.ST[i].mant2);
        !          1182:                sfpd.mant3 = SWAP_SHORT(fpu->stack.ST[i].mant3);
        !          1183:                sfpd.u.fields.exp = fpu->stack.ST[i].exp;
        !          1184:                sfpd.u.fields.sign = fpu->stack.ST[i].sign;
        !          1185:                sfpd.u.half = SWAP_SHORT(sfpd.u.half);
        !          1186:                memcpy(&(fpu->stack.ST[i]), &sfpd,
        !          1187:                       sizeof(struct swapped_fp_data_reg));
        !          1188:            }
        !          1189:        }
        !          1190: }
        !          1191: 
        !          1192: void
        !          1193: swap_i386_thread_exceptstate(
        !          1194: i386_thread_exceptstate_t *exc,
        !          1195: enum byte_sex target_byte_sex)
        !          1196: {
        !          1197:     struct swapped_err_code {
        !          1198:        union {
        !          1199:            struct err_code_normal {
        !          1200:                unsigned int            :16,
        !          1201:                                index   :13,
        !          1202:                                tbl     :2,
        !          1203:                                ext     :1;
        !          1204:            } normal;
        !          1205:            struct err_code_pgfault {
        !          1206:                unsigned int            :29,
        !          1207:                                user    :1,
        !          1208:                                wrtflt  :1,
        !          1209:                                prot    :1;
        !          1210:            } pgfault;
        !          1211:            unsigned long word;
        !          1212:        } u;
        !          1213:     } sec;
        !          1214:     unsigned long word;
        !          1215:     enum byte_sex host_byte_sex;
        !          1216: 
        !          1217:        host_byte_sex = get_host_byte_sex();
        !          1218: 
        !          1219:        exc->trapno = SWAP_LONG(exc->trapno);
        !          1220:        if(exc->trapno == 14){
        !          1221:            if(target_byte_sex == host_byte_sex){
        !          1222:                memcpy(&sec, &(exc->err), sizeof(struct swapped_err_code));
        !          1223:                sec.u.word = SWAP_LONG(sec.u.word);
        !          1224:                exc->err.pgfault.user   = sec.u.pgfault.user;
        !          1225:                exc->err.pgfault.wrtflt = sec.u.pgfault.wrtflt;
        !          1226:                exc->err.pgfault.prot   = sec.u.pgfault.prot;
        !          1227:            }
        !          1228:            else{
        !          1229:                sec.u.pgfault.prot   = exc->err.pgfault.prot;
        !          1230:                sec.u.pgfault.wrtflt = exc->err.pgfault.wrtflt;
        !          1231:                sec.u.pgfault.user   = exc->err.pgfault.user;
        !          1232:                sec.u.word = SWAP_LONG(sec.u.word);
        !          1233:                memcpy(&(exc->err), &sec, sizeof(struct swapped_err_code));
        !          1234:            }
        !          1235:        }
        !          1236:        else{
        !          1237:            if(target_byte_sex == host_byte_sex){
        !          1238:                memcpy(&sec, &(exc->err), sizeof(struct swapped_err_code));
        !          1239:                sec.u.word = SWAP_LONG(sec.u.word);
        !          1240:                word = sec.u.normal.index;
        !          1241:                exc->err.normal.index = SWAP_LONG(word);
        !          1242:                exc->err.normal.tbl   = sec.u.normal.tbl;
        !          1243:                exc->err.normal.ext   = sec.u.normal.ext;
        !          1244:            }
        !          1245:            else{
        !          1246:                sec.u.normal.ext   = exc->err.normal.ext;
        !          1247:                sec.u.normal.tbl   = exc->err.normal.tbl;
        !          1248:                word = exc->err.normal.index;
        !          1249:                sec.u.normal.index = SWAP_LONG(word);
        !          1250:                sec.u.word = SWAP_LONG(sec.u.word);
        !          1251:                memcpy(&(exc->err), &sec, sizeof(struct swapped_err_code));
        !          1252:            }
        !          1253:        }
        !          1254: }
        !          1255: 
        !          1256: void
        !          1257: swap_i386_thread_cthreadstate(
        !          1258: i386_thread_cthreadstate_t *user,
        !          1259: enum byte_sex target_byte_sex)
        !          1260: {
        !          1261:        user->self = SWAP_LONG(user->self);
        !          1262: }
        !          1263: 
        !          1264: void
        !          1265: swap_hppa_integer_thread_state(
        !          1266: struct hp_pa_integer_thread_state *regs,
        !          1267: enum byte_sex target_byte_order)
        !          1268: {
        !          1269:     regs->ts_gr1 = SWAP_LONG(regs->ts_gr1);
        !          1270:     regs->ts_gr2 = SWAP_LONG(regs->ts_gr2);
        !          1271:     regs->ts_gr3 = SWAP_LONG(regs->ts_gr3);
        !          1272:     regs->ts_gr4 = SWAP_LONG(regs->ts_gr4);
        !          1273:     regs->ts_gr5 = SWAP_LONG(regs->ts_gr5);
        !          1274:     regs->ts_gr6 = SWAP_LONG(regs->ts_gr6);
        !          1275:     regs->ts_gr7 = SWAP_LONG(regs->ts_gr7);
        !          1276:     regs->ts_gr8 = SWAP_LONG(regs->ts_gr8);
        !          1277:     regs->ts_gr9 = SWAP_LONG(regs->ts_gr9);
        !          1278:     regs->ts_gr10 = SWAP_LONG(regs->ts_gr10);
        !          1279:     regs->ts_gr11 = SWAP_LONG(regs->ts_gr11);
        !          1280:     regs->ts_gr12 = SWAP_LONG(regs->ts_gr12);
        !          1281:     regs->ts_gr13 = SWAP_LONG(regs->ts_gr13);
        !          1282:     regs->ts_gr14 = SWAP_LONG(regs->ts_gr14);
        !          1283:     regs->ts_gr15 = SWAP_LONG(regs->ts_gr15);
        !          1284:     regs->ts_gr16 = SWAP_LONG(regs->ts_gr16);
        !          1285:     regs->ts_gr17 = SWAP_LONG(regs->ts_gr17);
        !          1286:     regs->ts_gr18 = SWAP_LONG(regs->ts_gr18);
        !          1287:     regs->ts_gr19 = SWAP_LONG(regs->ts_gr19);
        !          1288:     regs->ts_gr20 = SWAP_LONG(regs->ts_gr20);
        !          1289:     regs->ts_gr21 = SWAP_LONG(regs->ts_gr21);
        !          1290:     regs->ts_gr22 = SWAP_LONG(regs->ts_gr22);
        !          1291:     regs->ts_gr23 = SWAP_LONG(regs->ts_gr23);
        !          1292:     regs->ts_gr24 = SWAP_LONG(regs->ts_gr24);
        !          1293:     regs->ts_gr25 = SWAP_LONG(regs->ts_gr25);
        !          1294:     regs->ts_gr26 = SWAP_LONG(regs->ts_gr26);
        !          1295:     regs->ts_gr27 = SWAP_LONG(regs->ts_gr27);
        !          1296:     regs->ts_gr28 = SWAP_LONG(regs->ts_gr28);
        !          1297:     regs->ts_gr29 = SWAP_LONG(regs->ts_gr29);
        !          1298:     regs->ts_gr30 = SWAP_LONG(regs->ts_gr30);
        !          1299:     regs->ts_gr31 = SWAP_LONG(regs->ts_gr31);
        !          1300:     regs->ts_sr0 = SWAP_LONG(regs->ts_sr0);
        !          1301:     regs->ts_sr1 = SWAP_LONG(regs->ts_sr1);
        !          1302:     regs->ts_sr2 = SWAP_LONG(regs->ts_sr2);
        !          1303:     regs->ts_sr3 = SWAP_LONG(regs->ts_sr3);
        !          1304:     regs->ts_sar = SWAP_LONG(regs->ts_sar);
        !          1305: }
        !          1306: 
        !          1307: void swap_hppa_frame_thread_state(
        !          1308:   struct hp_pa_frame_thread_state *frame,
        !          1309:   enum byte_sex target_byte_order)
        !          1310: {
        !          1311:   frame->ts_pcsq_front = SWAP_LONG(frame->ts_pcsq_front);
        !          1312:   frame->ts_pcsq_back = SWAP_LONG(frame->ts_pcsq_back);
        !          1313:   frame->ts_pcoq_front = SWAP_LONG(frame->ts_pcoq_front);
        !          1314:   frame->ts_pcoq_back = SWAP_LONG(frame->ts_pcoq_back);
        !          1315:   frame->ts_psw = SWAP_LONG(frame->ts_psw);
        !          1316:   frame->ts_unaligned_faults = SWAP_LONG(frame->ts_unaligned_faults);
        !          1317:   frame->ts_fault_address = SWAP_LONG(frame->ts_fault_address);
        !          1318:   frame->ts_step_range_start = SWAP_LONG(frame->ts_step_range_start);
        !          1319:   frame->ts_step_range_stop = SWAP_LONG(frame->ts_step_range_stop);
        !          1320: }
        !          1321: 
        !          1322: void swap_hppa_fp_thread_state(
        !          1323:   struct hp_pa_fp_thread_state *fp,
        !          1324:   enum byte_sex target_byte_order)
        !          1325: {
        !          1326:   fp->ts_fp0 = SWAP_DOUBLE(fp->ts_fp0);
        !          1327:   fp->ts_fp1 = SWAP_DOUBLE(fp->ts_fp1);
        !          1328:   fp->ts_fp2 = SWAP_DOUBLE(fp->ts_fp2);
        !          1329:   fp->ts_fp3 = SWAP_DOUBLE(fp->ts_fp3);
        !          1330:   fp->ts_fp4 = SWAP_DOUBLE(fp->ts_fp4);
        !          1331:   fp->ts_fp5 = SWAP_DOUBLE(fp->ts_fp5);
        !          1332:   fp->ts_fp6 = SWAP_DOUBLE(fp->ts_fp6);
        !          1333:   fp->ts_fp7 = SWAP_DOUBLE(fp->ts_fp7);
        !          1334:   fp->ts_fp8 = SWAP_DOUBLE(fp->ts_fp8);
        !          1335:   fp->ts_fp9 = SWAP_DOUBLE(fp->ts_fp9);
        !          1336:   fp->ts_fp10 = SWAP_DOUBLE(fp->ts_fp10);
        !          1337:   fp->ts_fp11 = SWAP_DOUBLE(fp->ts_fp11);
        !          1338:   fp->ts_fp12 = SWAP_DOUBLE(fp->ts_fp12);
        !          1339:   fp->ts_fp13 = SWAP_DOUBLE(fp->ts_fp13);
        !          1340:   fp->ts_fp14 = SWAP_DOUBLE(fp->ts_fp14);
        !          1341:   fp->ts_fp15 = SWAP_DOUBLE(fp->ts_fp15);
        !          1342:   fp->ts_fp16 = SWAP_DOUBLE(fp->ts_fp16);
        !          1343:   fp->ts_fp17 = SWAP_DOUBLE(fp->ts_fp17);
        !          1344:   fp->ts_fp18 = SWAP_DOUBLE(fp->ts_fp18);
        !          1345:   fp->ts_fp19 = SWAP_DOUBLE(fp->ts_fp19);
        !          1346:   fp->ts_fp20 = SWAP_DOUBLE(fp->ts_fp20);
        !          1347:   fp->ts_fp21 = SWAP_DOUBLE(fp->ts_fp21);
        !          1348:   fp->ts_fp22 = SWAP_DOUBLE(fp->ts_fp22);
        !          1349:   fp->ts_fp23 = SWAP_DOUBLE(fp->ts_fp23);
        !          1350:   fp->ts_fp24 = SWAP_DOUBLE(fp->ts_fp24);
        !          1351:   fp->ts_fp25 = SWAP_DOUBLE(fp->ts_fp25);
        !          1352:   fp->ts_fp26 = SWAP_DOUBLE(fp->ts_fp26);
        !          1353:   fp->ts_fp27 = SWAP_DOUBLE(fp->ts_fp27);
        !          1354:   fp->ts_fp28 = SWAP_DOUBLE(fp->ts_fp28);
        !          1355:   fp->ts_fp29 = SWAP_DOUBLE(fp->ts_fp29);
        !          1356:   fp->ts_fp30 = SWAP_DOUBLE(fp->ts_fp30);
        !          1357:   fp->ts_fp31 = SWAP_DOUBLE(fp->ts_fp31);
        !          1358: }
        !          1359: 
        !          1360: void
        !          1361: swap_sparc_thread_state_regs(
        !          1362:                        struct sparc_thread_state_regs *cpu,
        !          1363:                        enum byte_sex target_byte_sex)
        !          1364: {
        !          1365:   enum byte_sex host_byte_sex = get_host_byte_sex();
        !          1366:   struct p_status *pr_status = (struct p_status *) &(cpu->regs.r_psr);
        !          1367: 
        !          1368:   struct swapped_psr {
        !          1369:     union {
        !          1370:       struct {
        !          1371:        unsigned int 
        !          1372:        cwp:BITS_WIDTH(4,0),
        !          1373:        et:BIT_WIDTH(5),
        !          1374:        ps:BIT_WIDTH(6),
        !          1375:        s:BIT_WIDTH(7),
        !          1376:        pil:BITS_WIDTH(11,8),
        !          1377:        ef:BIT_WIDTH(12),
        !          1378:        ec:BIT_WIDTH(13),
        !          1379:        reserved:BITS_WIDTH(19,14),
        !          1380:        icc:BITS_WIDTH(23,20),
        !          1381:        ver:BITS_WIDTH(27,24),
        !          1382:        impl:BITS_WIDTH(31,28);
        !          1383:       } fields;
        !          1384:       unsigned int word;
        !          1385:     } u;
        !          1386:   } spsr;
        !          1387: 
        !          1388:   cpu->regs.r_pc = SWAP_LONG(cpu->regs.r_pc);
        !          1389:   cpu->regs.r_npc = SWAP_LONG(cpu->regs.r_npc);
        !          1390:   cpu->regs.r_y = SWAP_LONG(cpu->regs.r_y);
        !          1391:   cpu->regs.r_g1 = SWAP_LONG(cpu->regs.r_g1);
        !          1392:   cpu->regs.r_g2 = SWAP_LONG(cpu->regs.r_g2);
        !          1393:   cpu->regs.r_g3 = SWAP_LONG(cpu->regs.r_g3);
        !          1394:   cpu->regs.r_g4 = SWAP_LONG(cpu->regs.r_g4);
        !          1395:   cpu->regs.r_g5 = SWAP_LONG(cpu->regs.r_g5);
        !          1396:   cpu->regs.r_g6 = SWAP_LONG(cpu->regs.r_g6);
        !          1397:   cpu->regs.r_g7 = SWAP_LONG(cpu->regs.r_g7);
        !          1398:   cpu->regs.r_o0 = SWAP_LONG(cpu->regs.r_o0);
        !          1399:   cpu->regs.r_o1 = SWAP_LONG(cpu->regs.r_o1);
        !          1400:   cpu->regs.r_o2 = SWAP_LONG(cpu->regs.r_o2);
        !          1401:   cpu->regs.r_o3 = SWAP_LONG(cpu->regs.r_o3);
        !          1402:   cpu->regs.r_o4 = SWAP_LONG(cpu->regs.r_o4);
        !          1403:   cpu->regs.r_o5 = SWAP_LONG(cpu->regs.r_o5);
        !          1404:   cpu->regs.r_o6 = SWAP_LONG(cpu->regs.r_o6);
        !          1405:   cpu->regs.r_o7 = SWAP_LONG(cpu->regs.r_o7);
        !          1406: 
        !          1407:   if (target_byte_sex == host_byte_sex) {
        !          1408:     memcpy(&spsr, &(cpu->regs.r_psr), sizeof(struct swapped_psr));
        !          1409:     spsr.u.word = SWAP_LONG(spsr.u.word);
        !          1410:     pr_status->PSRREG.psr_bits.cwp = spsr.u.fields.cwp;
        !          1411:     pr_status->PSRREG.psr_bits.ps = spsr.u.fields.ps;
        !          1412:     pr_status->PSRREG.psr_bits.s = spsr.u.fields.s;
        !          1413:     pr_status->PSRREG.psr_bits.pil = spsr.u.fields.pil;
        !          1414:     pr_status->PSRREG.psr_bits.ef = spsr.u.fields.ef;
        !          1415:     pr_status->PSRREG.psr_bits.ec = spsr.u.fields.ec;
        !          1416:     pr_status->PSRREG.psr_bits.reserved = spsr.u.fields.reserved;
        !          1417:     pr_status->PSRREG.psr_bits.icc = spsr.u.fields.icc;
        !          1418:     pr_status->PSRREG.psr_bits.et = spsr.u.fields.ver;
        !          1419:     pr_status->PSRREG.psr_bits.impl = spsr.u.fields.impl;
        !          1420:   } else {
        !          1421:     spsr.u.fields.cwp = pr_status->PSRREG.psr_bits.cwp;
        !          1422:     spsr.u.fields.ps = pr_status->PSRREG.psr_bits.ps;
        !          1423:     spsr.u.fields.s = pr_status->PSRREG.psr_bits.s;
        !          1424:     spsr.u.fields.pil = pr_status->PSRREG.psr_bits.pil;
        !          1425:     spsr.u.fields.ef = pr_status->PSRREG.psr_bits.ef;
        !          1426:     spsr.u.fields.ec = pr_status->PSRREG.psr_bits.ec;
        !          1427:     spsr.u.fields.reserved = pr_status->PSRREG.psr_bits.reserved;
        !          1428:     spsr.u.fields.icc = pr_status->PSRREG.psr_bits.icc;
        !          1429:     spsr.u.fields.ver = pr_status->PSRREG.psr_bits.et;
        !          1430:     spsr.u.fields.impl = pr_status->PSRREG.psr_bits.impl;
        !          1431:     spsr.u.word = SWAP_LONG(spsr.u.word);
        !          1432:     memcpy(&(cpu->regs.r_psr), &spsr, sizeof(struct swapped_psr));
        !          1433:   }
        !          1434: }
        !          1435: 
        !          1436: void
        !          1437: swap_sparc_thread_state_fpu(
        !          1438:                        struct sparc_thread_state_fpu *fpu,
        !          1439:                        enum byte_sex target_byte_sex)
        !          1440: {
        !          1441:   enum byte_sex host_byte_sex = get_host_byte_sex();
        !          1442:   int i;
        !          1443:   struct f_status *fpu_status = (struct f_status *) &(fpu->fpu.Fpu_fsr);
        !          1444: 
        !          1445:   struct swapped_fsr {
        !          1446:     union {
        !          1447:       struct {
        !          1448:        unsigned int
        !          1449:        cexc:BITS_WIDTH(4,0),
        !          1450:        aexc:BITS_WIDTH(9,5),
        !          1451:        fcc:BITS_WIDTH(11,10),
        !          1452:        pr:BIT_WIDTH(12),
        !          1453:        qne:BIT_WIDTH(13),
        !          1454:        ftt:BITS_WIDTH(16,14),
        !          1455:        res:BITS_WIDTH(22,17),
        !          1456:        tem:BITS_WIDTH(27,23),
        !          1457:        rp:BITS_WIDTH(29,28),
        !          1458:        rd:BITS_WIDTH(31,30);
        !          1459:       } fields;
        !          1460:       unsigned int word;
        !          1461:     } u;
        !          1462:   } sfsr;
        !          1463: 
        !          1464:        
        !          1465:   /* floating point registers */
        !          1466:   for (i=0; i<16; i++)         /* 16 doubles */
        !          1467:     fpu->fpu.fpu_fr.Fpu_dregs[i] = SWAP_DOUBLE(fpu->fpu.fpu_fr.Fpu_dregs[i]);
        !          1468:   fpu->fpu.Fpu_q[0].FQu.whole = SWAP_DOUBLE(fpu->fpu.Fpu_q[0].FQu.whole);
        !          1469:   fpu->fpu.Fpu_q[1].FQu.whole = SWAP_DOUBLE(fpu->fpu.Fpu_q[1].FQu.whole);
        !          1470:   fpu->fpu.Fpu_flags = SWAP_LONG(fpu->fpu.Fpu_flags);
        !          1471:   fpu->fpu.Fpu_extra = SWAP_LONG(fpu->fpu.Fpu_extra);
        !          1472:   fpu->fpu.Fpu_qcnt = SWAP_LONG(fpu->fpu.Fpu_qcnt);
        !          1473: 
        !          1474:   if (target_byte_sex == host_byte_sex) {
        !          1475:     memcpy(&sfsr, &(fpu->fpu.Fpu_fsr), sizeof(unsigned int));
        !          1476:     sfsr.u.word = SWAP_LONG(sfsr.u.word);
        !          1477:     fpu_status->FPUREG.Fpu_fsr_bits.rd = sfsr.u.fields.rd;
        !          1478:     fpu_status->FPUREG.Fpu_fsr_bits.rp = sfsr.u.fields.rp;
        !          1479:     fpu_status->FPUREG.Fpu_fsr_bits.tem = sfsr.u.fields.tem;
        !          1480:     fpu_status->FPUREG.Fpu_fsr_bits.res = sfsr.u.fields.res;
        !          1481:     fpu_status->FPUREG.Fpu_fsr_bits.ftt = sfsr.u.fields.ftt;
        !          1482:     fpu_status->FPUREG.Fpu_fsr_bits.qne = sfsr.u.fields.qne;
        !          1483:     fpu_status->FPUREG.Fpu_fsr_bits.pr = sfsr.u.fields.pr;
        !          1484:     fpu_status->FPUREG.Fpu_fsr_bits.fcc = sfsr.u.fields.fcc;
        !          1485:     fpu_status->FPUREG.Fpu_fsr_bits.aexc = sfsr.u.fields.aexc;
        !          1486:     fpu_status->FPUREG.Fpu_fsr_bits.cexc = sfsr.u.fields.cexc;
        !          1487:   } else {
        !          1488:     sfsr.u.fields.rd = fpu_status->FPUREG.Fpu_fsr_bits.rd;
        !          1489:     sfsr.u.fields.rp = fpu_status->FPUREG.Fpu_fsr_bits.rp;
        !          1490:     sfsr.u.fields.tem = fpu_status->FPUREG.Fpu_fsr_bits.tem;
        !          1491:     sfsr.u.fields.res = fpu_status->FPUREG.Fpu_fsr_bits.res;
        !          1492:     sfsr.u.fields.ftt = fpu_status->FPUREG.Fpu_fsr_bits.ftt;
        !          1493:     sfsr.u.fields.qne = fpu_status->FPUREG.Fpu_fsr_bits.qne;
        !          1494:     sfsr.u.fields.pr = fpu_status->FPUREG.Fpu_fsr_bits.pr;
        !          1495:     sfsr.u.fields.fcc = fpu_status->FPUREG.Fpu_fsr_bits.fcc;
        !          1496:     sfsr.u.fields.aexc = fpu_status->FPUREG.Fpu_fsr_bits.aexc;
        !          1497:     sfsr.u.fields.cexc = fpu_status->FPUREG.Fpu_fsr_bits.cexc;
        !          1498:     sfsr.u.word = SWAP_LONG(sfsr.u.word);
        !          1499:     memcpy(&(fpu->fpu.Fpu_fsr), &sfsr, sizeof(struct swapped_fsr));
        !          1500:   }
        !          1501: }
        !          1502: 
        !          1503: void
        !          1504: swap_ident_command(
        !          1505: struct ident_command *id_cmd,
        !          1506: enum byte_sex target_byte_sex)
        !          1507: {
        !          1508:        id_cmd->cmd = SWAP_LONG(id_cmd->cmd);
        !          1509:        id_cmd->cmdsize = SWAP_LONG(id_cmd->cmdsize);
        !          1510: }
        !          1511: 
        !          1512: void
        !          1513: swap_nlist(
        !          1514: struct nlist *symbols,
        !          1515: unsigned long nsymbols,
        !          1516: enum byte_sex target_byte_sex)
        !          1517: {
        !          1518:     unsigned long i;
        !          1519: 
        !          1520:        for(i = 0; i < nsymbols; i++){
        !          1521:            symbols[i].n_un.n_strx = SWAP_LONG(symbols[i].n_un.n_strx);
        !          1522:            /* n_type */
        !          1523:            /* n_sect */
        !          1524:            symbols[i].n_desc = SWAP_SHORT(symbols[i].n_desc);
        !          1525:            symbols[i].n_value = SWAP_LONG(symbols[i].n_value);
        !          1526:        }
        !          1527: }
        !          1528: 
        !          1529: void
        !          1530: swap_ranlib(
        !          1531: struct ranlib *ranlibs,
        !          1532: unsigned long nranlibs,
        !          1533: enum byte_sex target_byte_sex)
        !          1534: {
        !          1535:     unsigned long i;
        !          1536: 
        !          1537:        for(i = 0; i < nranlibs; i++){
        !          1538:            ranlibs[i].ran_un.ran_strx = SWAP_LONG(ranlibs[i].ran_un.ran_strx);
        !          1539:            ranlibs[i].ran_off = SWAP_LONG(ranlibs[i].ran_off);
        !          1540:        }
        !          1541: }
        !          1542: 
        !          1543: void
        !          1544: swap_relocation_info(
        !          1545: struct relocation_info *relocs,
        !          1546: unsigned long nrelocs,
        !          1547: enum byte_sex target_byte_sex)
        !          1548: {
        !          1549:     unsigned long i;
        !          1550:     enum byte_sex host_byte_sex;
        !          1551:     enum bool to_host_byte_sex, scattered;
        !          1552: 
        !          1553:     struct swapped_relocation_info {
        !          1554:        long    r_address;
        !          1555:        union {
        !          1556:            struct {
        !          1557:                unsigned int
        !          1558:                    r_type:4,
        !          1559:                    r_extern:1,
        !          1560:                    r_length:2,
        !          1561:                    r_pcrel:1,
        !          1562:                    r_symbolnum:24;
        !          1563:            } fields;
        !          1564:            unsigned long word;
        !          1565:        } u;
        !          1566:     } sr;
        !          1567: 
        !          1568:     struct swapped_scattered_relocation_info {
        !          1569:        unsigned long word;
        !          1570:        long    r_value;
        !          1571:     } *ssr;
        !          1572: 
        !          1573:        host_byte_sex = get_host_byte_sex();
        !          1574:        to_host_byte_sex = target_byte_sex == host_byte_sex;
        !          1575: 
        !          1576:        for(i = 0; i < nrelocs; i++){
        !          1577:            if(to_host_byte_sex)
        !          1578:                scattered = (SWAP_LONG(relocs[i].r_address) & R_SCATTERED) != 0;
        !          1579:            else
        !          1580:                scattered = ((relocs[i].r_address) & R_SCATTERED) != 0;
        !          1581:            if(scattered == FALSE){
        !          1582:                if(to_host_byte_sex){
        !          1583:                    memcpy(&sr, relocs + i, sizeof(struct relocation_info));
        !          1584:                    sr.r_address = SWAP_LONG(sr.r_address);
        !          1585:                    sr.u.word = SWAP_LONG(sr.u.word);
        !          1586:                    relocs[i].r_address = sr.r_address;
        !          1587:                    relocs[i].r_symbolnum = sr.u.fields.r_symbolnum;
        !          1588:                    relocs[i].r_pcrel = sr.u.fields.r_pcrel;
        !          1589:                    relocs[i].r_length = sr.u.fields.r_length;
        !          1590:                    relocs[i].r_extern = sr.u.fields.r_extern;
        !          1591:                    relocs[i].r_type = sr.u.fields.r_type;
        !          1592:                }
        !          1593:                else{
        !          1594:                    sr.r_address = relocs[i].r_address;
        !          1595:                    sr.u.fields.r_symbolnum = relocs[i].r_symbolnum;
        !          1596:                    sr.u.fields.r_length = relocs[i].r_length;
        !          1597:                    sr.u.fields.r_pcrel = relocs[i].r_pcrel;
        !          1598:                    sr.u.fields.r_extern = relocs[i].r_extern;
        !          1599:                    sr.u.fields.r_type = relocs[i].r_type;
        !          1600:                    sr.r_address = SWAP_LONG(sr.r_address);
        !          1601:                    sr.u.word = SWAP_LONG(sr.u.word);
        !          1602:                    memcpy(relocs + i, &sr, sizeof(struct relocation_info));
        !          1603:                }
        !          1604:            }
        !          1605:            else{
        !          1606:                ssr = (struct swapped_scattered_relocation_info *)(relocs + i);
        !          1607:                ssr->word = SWAP_LONG(ssr->word);
        !          1608:                ssr->r_value = SWAP_LONG(ssr->r_value);
        !          1609:            }
        !          1610:        }
        !          1611: }
        !          1612: 
        !          1613: void
        !          1614: swap_indirect_symbols(
        !          1615: unsigned long *indirect_symbols,
        !          1616: unsigned long nindirect_symbols,
        !          1617: enum byte_sex target_byte_sex)
        !          1618: {
        !          1619:     unsigned long i;
        !          1620: 
        !          1621:        for(i = 0; i < nindirect_symbols; i++)
        !          1622:            indirect_symbols[i] = SWAP_LONG(indirect_symbols[i]);
        !          1623: }
        !          1624: 
        !          1625: void
        !          1626: swap_dylib_reference(
        !          1627: struct dylib_reference *refs,
        !          1628: unsigned long nrefs,
        !          1629: enum byte_sex target_byte_sex)
        !          1630: {
        !          1631:     struct swapped_dylib_reference {
        !          1632:        union {
        !          1633:            struct {
        !          1634:                unsigned long
        !          1635:                    flags:8,
        !          1636:                    isym:24;
        !          1637:            } fields;
        !          1638:            unsigned long word;
        !          1639:        } u;
        !          1640:     } sref;
        !          1641: 
        !          1642:     unsigned long i;
        !          1643:     enum byte_sex host_byte_sex;
        !          1644: 
        !          1645:        host_byte_sex = get_host_byte_sex();
        !          1646: 
        !          1647:        for(i = 0; i < nrefs; i++){
        !          1648:            if(target_byte_sex == host_byte_sex){
        !          1649:                memcpy(&sref, refs + i, sizeof(struct swapped_dylib_reference));
        !          1650:                sref.u.word = SWAP_LONG(sref.u.word);
        !          1651:                refs[i].flags = sref.u.fields.flags;
        !          1652:                refs[i].isym = sref.u.fields.isym;
        !          1653:            }
        !          1654:            else{
        !          1655:                sref.u.fields.isym = refs[i].isym;
        !          1656:                sref.u.fields.flags = refs[i].flags;
        !          1657:                sref.u.word = SWAP_LONG(sref.u.word);
        !          1658:                memcpy(refs + i, &sref, sizeof(struct swapped_dylib_reference));
        !          1659:            }
        !          1660:        }
        !          1661: 
        !          1662: }
        !          1663: 
        !          1664: void
        !          1665: swap_dylib_module(
        !          1666: struct dylib_module *mods,
        !          1667: unsigned long nmods,
        !          1668: enum byte_sex target_byte_sex)
        !          1669: {
        !          1670:     unsigned long i;
        !          1671: 
        !          1672:        for(i = 0; i < nmods; i++){
        !          1673:            mods[i].module_name = SWAP_LONG(mods[i].module_name);
        !          1674:            mods[i].iextdefsym  = SWAP_LONG(mods[i].iextdefsym);
        !          1675:            mods[i].nextdefsym  = SWAP_LONG(mods[i].nextdefsym);
        !          1676:            mods[i].irefsym     = SWAP_LONG(mods[i].irefsym);
        !          1677:            mods[i].nrefsym     = SWAP_LONG(mods[i].nrefsym);
        !          1678:            mods[i].ilocalsym   = SWAP_LONG(mods[i].ilocalsym);
        !          1679:            mods[i].nlocalsym   = SWAP_LONG(mods[i].nlocalsym);
        !          1680:            mods[i].iextrel     = SWAP_LONG(mods[i].iextrel);
        !          1681:            mods[i].nextrel     = SWAP_LONG(mods[i].nextrel);
        !          1682:            mods[i].iinit       = SWAP_LONG(mods[i].iinit);
        !          1683:            mods[i].ninit       = SWAP_LONG(mods[i].ninit);
        !          1684:        }
        !          1685: }
        !          1686: 
        !          1687: void
        !          1688: swap_dylib_table_of_contents(
        !          1689: struct dylib_table_of_contents *tocs,
        !          1690: unsigned long ntocs,
        !          1691: enum byte_sex target_byte_sex)
        !          1692: {
        !          1693:     unsigned long i;
        !          1694: 
        !          1695:        for(i = 0; i < ntocs; i++){
        !          1696:            tocs[i].symbol_index = SWAP_LONG(tocs[i].symbol_index);
        !          1697:            tocs[i].module_index = SWAP_LONG(tocs[i].module_index);
        !          1698:        }
        !          1699: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.