Changeset 0d2f805 in mainline


Ignore:
Timestamp:
2005-05-06T12:58:44Z (20 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
75e5a8a
Parents:
47d78c6
Message:

Variable argument list support for architectures passing arguments on stack.

Files:
4 added
5 edited

Legend:

Unmodified
Added
Removed
  • arch/ia32/include/types.h

    r47d78c6 r0d2f805  
    4343typedef __u32 pri_t;
    4444
     45typedef __u32 __native;
     46
    4547#endif
  • arch/ia64/include/types.h

    r47d78c6 r0d2f805  
    4343typedef __u32 pri_t;
    4444
     45typedef __u64 __native;
     46
    4547#endif
  • arch/mips/include/types.h

    r47d78c6 r0d2f805  
    4343typedef __u32 pri_t;
    4444
     45typedef __u32 __native;
     46
    4547#endif
  • include/typedefs.h

    r47d78c6 r0d2f805  
    6060typedef struct link link_t;
    6161
     62typedef char *char_ptr;
     63
    6264#endif
  • src/debug/print.c

    r47d78c6 r0d2f805  
    3030#include <print.h>
    3131#include <synch/spinlock.h>
     32#include <arch/arg.h>
     33
    3234
    3335static char digits[] = "0123456789abcdef";
     
    8082void printf(char *fmt, ...)
    8183{
    82         int irqpri, i = 0, pos = 0;
    83         char c;
     84        int irqpri, i = 0;
     85        va_list ap;
     86        char c;
     87
     88        va_start(ap, fmt);
    8489
    8590        irqpri = cpu_priority_high();
    8691        spinlock_lock(&printflock);
     92
    8793        while (c = fmt[i++]) {
    8894                switch (c) {
     
    100106                                 */
    101107                                case 's':
    102                                         print_str((char *) *(((__address *) &fmt + (++pos))));
     108                                        print_str(va_arg(ap, char_ptr));
    103109                                        goto loop;
    104110
    105111                                case 'c':
    106                                         c = *((char *) ((__address *)(&fmt + (++pos))));
     112                                        c = va_arg(ap, char);
    107113                                        break;
    108114
     
    113119                                        print_str("0x");
    114120                                case 'l':
    115                                         print_fixed_hex(*((__address *)(&fmt + (++pos))),INT32);
     121                                        print_fixed_hex(va_arg(ap, __native), INT32);
    116122                                        goto loop;
    117123
     
    119125                                        print_str("0x");
    120126                                case 'w':
    121                                         print_fixed_hex(*((__address *)(&fmt + (++pos))),INT16);
     127                                        print_fixed_hex(va_arg(ap, __native), INT16);
    122128                                        goto loop;
    123129
     
    125131                                        print_str("0x");
    126132                                case 'b':
    127                                         print_fixed_hex(*((__address *)(&fmt + (++pos))),INT8);
     133                                        print_fixed_hex(va_arg(ap, __native), INT8);
    128134                                        goto loop;
    129135
     
    132138                                 */
    133139                                case 'd':
    134                                         print_number(*((__address *)(&fmt + (++pos))), 10);
     140                                        print_number(va_arg(ap, __native), 10);
    135141                                        goto loop;
    136142
     
    138144                                        print_str("0x");
    139145                                case 'x':
    140                                         print_number(*((__address *)(&fmt + (++pos))), 16);
     146                                        print_number(va_arg(ap, __native), 16);
    141147                                        goto loop;
    142148           
     
    158164        spinlock_unlock(&printflock);
    159165        cpu_priority_restore(irqpri);
     166       
     167        va_end(ap);
    160168}
Note: See TracChangeset for help on using the changeset viewer.