Article View: gnu.gcc.bug
Article #6265Objective-C bug in initialisation code
From: Robert Bradford
Date: Fri, 29 Dec 1995 00:00
Date: Fri, 29 Dec 1995 00:00
3495 lines
80301 bytes
80301 bytes
Dear GNU
I believe that I have found a problem with the Objective-C compiler.
The following details are known.
* Existing code, which worked under Release 2.6.3 of the compiler,
fails under Release 2.7.0
* My operating system: Linux v. 1.2.13 running on a 486 DX4 100MHz
* Line of Objective-C code which fails: try = [Try alloc]; where
Try is the simplest Objective-C test subclass of Object.
* Program exits with floating point exception.
* What is happening: function __objc_init_install_dtable(id receiver,
SEL op) in sendmsg.c is called, and executes normally, until the
label 'already_initialized'.
The function __builtin_apply seems to execute correctly. In this
case thee 'imp' argument is actually used for the 'alloc' method,
and a suitable block of memory is returned.
When the function __builtin_return is called, this seems to do some
weird and wonderful things with floating point registers which is
beyond me. Since the code is expr.c says that it should be handling
the address of a memory block, I can't immediately see why floating
point is needed here.
Code exits at address __objc_init_install_dtable+443, which has a
fldt assembly instruction.
Files are given below:
First is the file sendmsg.c from the objc section of the GCC
compiler.
/* GNU Objective C Runtime message lookup
Copyright (C) 1993, 1995 Free Software Foundation, Inc.
Contributed by Kresten Krab Thorup
This file is part of GNU CC.
GNU CC is free software; you can redistribute it and/or modify it
under the
terms of the GNU General Public License as published by the Free
Software
Foundation; either version 2, or (at your option) any later version.
GNU CC is distributed in the hope that it will be useful, but WITHOUT
ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more
details.
You should have received a copy of the GNU General Public License
along with
GNU CC; see the file COPYING. If not, write to the Free Software
Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* As a special exception, if you link this library with files
compiled with
GCC to produce an executable, this does not cause the resulting
executable
to be covered by the GNU General Public License. This exception
does not
however invalidate any other reasons why the executable file might
be
covered by the GNU General Public License. */
#include "../tconfig.h"
#include "runtime.h"
#include "sarray.h"
#include "encoding.h"
/* this is how we hack STRUCT_VALUE to be 1 or 0 */
#define gen_rtx(args...) 1
#define rtx int
#if STRUCT_VALUE == 0
#define INVISIBLE_STRUCT_RETURN 1
#else
#define INVISIBLE_STRUCT_RETURN 0
#endif
/* The uninstalled dispatch table */
struct sarray* __objc_uninstalled_dtable = 0;
/* Send +initialize to class */
static void __objc_send_initialize(Class);
static void __objc_install_dispatch_table_for_class (Class);
/* Forward declare some functions */
static void __objc_init_install_dtable(id, SEL);
static id __objc_word_forward(id, SEL, ...);
typedef struct { id many[8]; } __big;
#if INVISIBLE_STRUCT_RETURN
static __big
#else
static id
#endif
__objc_block_forward(id, SEL, ...);
static Method_t search_for_method_in_hierarchy (Class class, SEL
sel);
static Method_t search_for_method_in_list(MethodList_t list, SEL op);
id nil_method(id, SEL, ...);
id
nil_method(id receiver, SEL op, ...)
{
return receiver;
}
/* Given a class and selector, return the selector's implementation.
*/
__inline__
IMP
get_imp (Class class, SEL sel)
{
IMP impl;
void* res = sarray_get (class->dtable, (size_t) sel->sel_id);
if(res == __objc_init_install_dtable)
{
__objc_install_dispatch_table_for_class (class);
res = sarray_get (class->dtable, (size_t) sel->sel_id);
}
if (res == 0)
{
const char *t = sel->sel_types;
if (t && (*t == '[' || *t == '(' || *t == '{'))
res = (IMP)__objc_block_forward;
else
res = (IMP)__objc_word_forward;
}
return res;
}
__inline__ BOOL
__objc_responds_to (id object, SEL sel)
{
void* res = sarray_get (object->class_pointer->dtable, (size_t)
sel->sel_id);
if(res == __objc_init_install_dtable)
{
__objc_install_dispatch_table_for_class
(object->class_pointer);
res = sarray_get (object->class_pointer->dtable, (size_t)
sel->sel_id);
}
return (res != 0);
}
/* This is the lookup function. All entries in the table are either
a
valid method *or* one of `__objc_missing_method' which calls
forward:: etc, or `__objc_init_install_dtable' which installs the
real dtable */
__inline__ IMP
objc_msg_lookup(id receiver, SEL op)
{
IMP result;
if(receiver)
{
result = sarray_get(receiver->class_pointer->dtable,
(sidx)op->sel_id);
if (result == 0)
{
const char *t = op->sel_types;
if (t && (*t == '[' || *t == '(' || *t == '{'))
result = (IMP)__objc_block_forward;
else
result = (IMP)__objc_word_forward;
}
return result;
}
else
return nil_method;
}
IMP
objc_msg_lookup_super (Super_t super, SEL sel)
{
if (super->self)
return get_imp (super->class, sel);
else
return nil_method;
}
int method_get_sizeof_arguments (Method*);
retval_t
objc_msg_sendv(id object, SEL op, arglist_t arg_frame)
{
Method* m = class_get_instance_method(object->class_pointer, op);
const char *type;
*((id*)method_get_first_argument (m, arg_frame, &type)) = object;
*((SEL*)method_get_next_argument (arg_frame, &type)) = op;
return __builtin_apply((apply_t)m->method_imp,
arg_frame,
method_get_sizeof_arguments (m));
}
void __objc_init_dispatch_tables()
{
__objc_uninstalled_dtable
= sarray_new(200, __objc_init_install_dtable);
}
/* This one is a bit hairy. This function is installed in the
premature dispatch table, and thus called once for each class,
namely when the very first message is send to it. */
static void __objc_init_install_dtable(id receiver, SEL op)
{
__label__ already_initialized;
IMP imp;
void* args;
void* result;
/* This may happen, if the programmer has taken the address of a
method before the dtable was initialized... too bad for him! */
if(receiver->class_pointer->dtable != __objc_uninstalled_dtable)
goto already_initialized;
if(CLS_ISCLASS(receiver->class_pointer))
{
/* receiver is an ordinary object */
assert(CLS_ISCLASS(receiver->class_pointer));
/* install instance methods table */
__objc_install_dispatch_table_for_class
(receiver->class_pointer);
/* call +initialize -- this will in turn install the factory
dispatch table if not already done :-) */
__objc_send_initialize(receiver->class_pointer);
}
else
{
/* receiver is a class object */
assert(CLS_ISCLASS((Class)receiver));
assert(CLS_ISMETA(receiver->class_pointer));
/* Install real dtable for factory methods */
__objc_install_dispatch_table_for_class
(receiver->class_pointer);
if (strcmp (sel_get_name (op), "initialize"))
__objc_send_initialize((Class)receiver);
else
CLS_SETINITIALIZED((Class)receiver);
}
already_initialized:
/* Get real method for this in newly installed dtable */
imp = get_imp(receiver->class_pointer, op);
args = __builtin_apply_args();
result = __builtin_apply((apply_t)imp, args, 96);
if (result)
__builtin_return (result);
else
return;
}
/* Install dummy table for class which causes the first message to
that class (or instances hereof) to be initialized properly */
void __objc_install_premature_dtable(Class class)
{
assert(__objc_uninstalled_dtable);
class->dtable = __objc_uninstalled_dtable;
}
/* Send +initialize to class if not already done */
static void __objc_send_initialize(Class class)
{
/* This *must* be a class object */
assert(CLS_ISCLASS(class));
assert(!CLS_ISMETA(class));
if (!CLS_ISINITIALIZED(class))
{
CLS_SETINITIALIZED(class);
CLS_SETINITIALIZED(class->class_pointer);
if(class->super_class)
__objc_send_initialize(class->super_class);
{
SEL op = sel_register_name ("initialize");
Class tmpclass = class;
IMP imp = 0;
while (!imp && tmpclass) {
MethodList_t method_list =
tmpclass->class_pointer->methods;
while(!imp && method_list) {
int i;
Method_t method;
for (i=0;i<method_list->method_count;i++) {
method = &(method_list->method_list[i]);
if (method->method_name->sel_id == op->sel_id) {
imp = method->method_imp;
break;
}
}
method_list = method_list->method_next;
}
tmpclass = tmpclass->super_class;
}
if (imp)
(*imp)((id)class, op);
}
}
}
static void
__objc_install_dispatch_table_for_class (Class class)
{
Class super;
MethodList_t mlist;
int counter;
/* If the class has not yet had it's class links resolved, we must
re-compute all class links */
if(!CLS_ISRESOLV(class))
__objc_resolve_class_links();
super = class->super_class;
if (super != 0 && (super->dtable == __objc_uninstalled_dtable))
__objc_install_dispatch_table_for_class (super);
/* Allocate dtable if necessary */
if (super == 0)
{
class->dtable = sarray_new (__objc_selector_max_index, 0);
}
else
class->dtable = sarray_lazy_copy (super->dtable);
for (mlist = class->methods; mlist; mlist = mlist->method_next)
{
counter = mlist->method_count - 1;
while (counter >= 0)
{
Method_t method = &(mlist->method_list[counter]);
sarray_at_put_safe (class->dtable,
(sidx) method->method_name->sel_id,
method->method_imp);
counter -= 1;
}
}
}
void __objc_update_dispatch_table_for_class (Class class)
{
Class next;
/* not yet installed -- skip it */
if (class->dtable == __objc_uninstalled_dtable)
return;
sarray_free (class->dtable); /* release memory */
__objc_install_premature_dtable (class); /* someone might require
it... */
__objc_install_dispatch_table_for_class (class); /* could have been
lazy... */
if (class->subclass_list) /* Traverse subclasses */
for (next = class->subclass_list; next; next =
next->sibling_class)
__objc_update_dispatch_table_for_class (next);
}
/* This function adds a method list to a class. This function is
typically called by another function specific to the run-time. As
such this function does not worry about thread safe issued.
This one is only called for categories. Class objects have their
methods installed right away, and their selectors are made into
SEL's by the function __objc_register_selectors_from_class. */
void
class_add_method_list (Class class, MethodList_t list)
{
int i;
static SEL initialize_sel = 0;
if (!initialize_sel)
initialize_sel = sel_register_name ("initialize");
/* Passing of a linked list is not allowed. Do multiple calls. */
assert (!list->method_next);
/* Check for duplicates. */
for (i = 0; i < list->method_count; ++i)
{
Method_t method = &list->method_list[i];
if (method->method_name) /* Sometimes these are NULL */
{
/* This is where selector names are transmogrified to SEL's
*/
method->method_name =
sel_register_typed_name ((const
char*)method->method_name,
method->method_types);
if (search_for_method_in_list (class->methods,
method->method_name)
&& method->method_name->sel_id !=
initialize_sel->sel_id)
{
/* Duplication. Print a error message an change the
method name
to NULL. */
fprintf (stderr, "attempt to add a existing method:
%s\n",
sel_get_name(method->method_name));
method->method_name = 0;
}
}
}
/* Add the methods to the class's method list. */
list->method_next = class->methods;
class->methods = list;
}
Method_t
class_get_instance_method(Class class, SEL op)
{
return search_for_method_in_hierarchy(class, op);
}
Method_t
class_get_class_method(MetaClass class, SEL op)
{
return search_for_method_in_hierarchy(class, op);
}
/* Search for a method starting from the current class up its
hierarchy.
Return a pointer to the method's method structure if found. NULL
otherwise. */
static Method_t
search_for_method_in_hierarchy (Class cls, SEL sel)
{
Method_t method = NULL;
Class class;
if (! sel_is_mapped (sel))
return NULL;
/* Scan the method list of the class. If the method isn't found in
the
list then step to its super class. */
for (class = cls; ((! method) && class); class =
class->super_class)
method = search_for_method_in_list (class->methods, sel);
return method;
}
/* Given a linked list of method and a method's name. Search for the
named
method's method structure. Return a pointer to the method's
method
structure if found. NULL otherwise. */
static Method_t
search_for_method_in_list (MethodList_t list, SEL op)
{
MethodList_t method_list = list;
if (! sel_is_mapped (op))
return NULL;
/* If not found then we'll search the list. */
while (method_list)
{
int i;
/* Search the method list. */
for (i = 0; i < method_list->method_count; ++i)
{
Method_t method = &method_list->method_list[i];
if (method->method_name)
if (method->method_name->sel_id == op->sel_id)
return method;
}
/* The method wasn't found. Follow the link to the next list
of
methods. */
method_list = method_list->method_next;
}
return NULL;
}
static retval_t __objc_forward (id object, SEL sel, arglist_t args);
static id
__objc_word_forward (id rcv, SEL op, ...)
{
void *args, *res;
args = __builtin_apply_args ();
res = __objc_forward (rcv, op, args);
if (res)
__builtin_return (res);
else
return res;
}
#if INVISIBLE_STRUCT_RETURN
static __big
#else
static id
#endif
__objc_block_forward (id rcv, SEL op, ...)
{
void *args, *res;
args = __builtin_apply_args ();
res = __objc_forward (rcv, op, args);
if (res)
__builtin_return (res);
}
/* This function is installed in the dispatch table for all methods
which are
not implemented. Thus, it is called when a selector is not
recognized. */
static retval_t
__objc_forward (id object, SEL sel, arglist_t args)
{
IMP imp;
static SEL frwd_sel = 0;
SEL err_sel;
/* first try if the object understands forward:: */
if (!frwd_sel)
frwd_sel = sel_get_any_uid("forward::");
if (__objc_responds_to (object, frwd_sel))
{
imp = get_imp(object->class_pointer, frwd_sel);
return (*imp)(object, frwd_sel, sel, args);
}
/* If the object recognizes the doesNotRecognize: method then we're
going
to send it. */
err_sel = sel_get_any_uid ("doesNotRecognize:");
if (__objc_responds_to (object, err_sel))
{
imp = get_imp (object->class_pointer, err_sel);
return (*imp) (object, err_sel, sel);
}
/* The object doesn't recognize the method. Check for responding
to
error:. If it does then sent it. */
{
size_t strlen (const char*);
char msg[256 + strlen ((const char*)sel_get_name (sel))
+ strlen ((const char*)object->class_pointer->name)];
sprintf (msg, "(%s) %s does not recognize %s",
(CLS_ISMETA(object->class_pointer)
? "class"
: "instance" ),
object->class_pointer->name, sel_get_name (sel));
err_sel = sel_get_any_uid ("error:");
if (__objc_responds_to (object, err_sel))
{
imp = get_imp (object->class_pointer, err_sel);
return (*imp) (object, sel_get_any_uid ("error:"), msg);
}
/* The object doesn't respond to doesNotRecognize: or error:;
Therefore,
a default action is taken. */
fprintf (stderr, "fatal: %s\n", msg);
abort ();
}
}
void __objc_print_dtable_stats()
{
int total = 0;
printf("memory usage: (%s)\n",
#ifdef OBJC_SPARSE2
"2-level sparse arrays"
#else
"3-level sparse arrays"
#endif
);
printf("arrays: %d = %ld bytes\n", narrays,
(int)narrays*sizeof(struct sarray));
total += narrays*sizeof(struct sarray);
printf("buckets: %d = %ld bytes\n", nbuckets,
(int)nbuckets*sizeof(struct sbucket));
total += nbuckets*sizeof(struct sbucket);
printf("idxtables: %d = %ld bytes\n", idxsize,
(int)idxsize*sizeof(void*));
total += idxsize*sizeof(void*);
printf("-----------------------------------\n");
printf("total: %d bytes\n", total);
printf("===================================\n");
}
-------------
Next is the assembly output with line debugging info of the same
file.
.file "sendmsg.c"
.version "01.01"
.stabs "/robert/gcc-2.7.0/objc/",100,0,0,.Ltext0
.stabs "sendmsg.c",100,0,0,.Ltext0
.text
.Ltext0:
.stabs "gcc2_compiled.", 0x3c, 0, 0, 0
.stabs "int:t1=r1;-2147483648;2147483647;",128,0,0,0
.stabs "char:t2=r2;0;127;",128,0,0,0
.stabs "long int:t3=r1;-2147483648;2147483647;",128,0,0,0
.stabs "unsigned int:t4=r1;0;-1;",128,0,0,0
.stabs "long unsigned int:t5=r1;0;-1;",128,0,0,0
.stabs "long long
int:t6=r1;01000000000000000000000;0777777777777777777777;",128,0,0,0
.stabs "long long unsigned
int:t7=r1;0000000000000;01777777777777777777777;",128,0,0,0
.stabs "short int:t8=r1;-32768;32767;",128,0,0,0
.stabs "short unsigned int:t9=r1;0;65535;",128,0,0,0
.stabs "signed char:t10=r1;-128;127;",128,0,0,0
.stabs "unsigned char:t11=r1;0;255;",128,0,0,0
.stabs "float:t12=r1;4;0;",128,0,0,0
.stabs "double:t13=r1;8;0;",128,0,0,0
.stabs "long double:t14=r1;12;0;",128,0,0,0
.stabs "complex int:t15=s8real:1,0,32;imag:1,32,32;;",128,0,0,0
.stabs "complex float:t16=r16;4;0;",128,0,0,0
.stabs "complex double:t17=r17;8;0;",128,0,0,0
.stabs "complex long double:t18=r18;12;0;",128,0,0,0
.stabs "void:t19=19",128,0,0,0
.stabs "reg_class:T20=eNO_REGS:0,AREG:1,DREG:2,\\",128,0,0,0
.stabs "CREG:3,BREG:4,AD_REGS:5,Q_REGS:6,\\",128,0,0,0
.stabs "SIREG:7,DIREG:8,INDEX_REGS:9,GENERAL_REGS:10,\\",128,0,0,0
.stabs "FP_TOP_REG:11,FP_SECOND_REG:12,FLOAT_REGS:13,\\",128,0,0,0
.stabs "ALL_REGS:14,LIM_REG_CLASSES:15,;",128,0,0,0
.stabs "i386_args:T21=s12words:1,0,32;nregs:1,32,32;\\",128,0,0,0
.stabs "regno:1,64,32;;",128,0,0,0
.stabs "CUMULATIVE_ARGS:t21",128,0,821,0
.stabs "__gnuc_va_list:t22=*19",128,0,49,0
.stabs "va_list:t22",128,0,146,0
.stabs "__long_double_t:t14",128,0,118,0
.stabs "_G_clock_t:t3",128,0,23,0
.stabs "_G_dev_t:t9",128,0,24,0
.stabs "_G_fpos_t:t3",128,0,25,0
.stabs "_G_gid_t:t9",128,0,26,0
.stabs "_G_ino_t:t5",128,0,27,0
.stabs "_G_mode_t:t9",128,0,28,0
.stabs "_G_nlink_t:t9",128,0,29,0
.stabs "_G_off_t:t3",128,0,30,0
.stabs "_G_pid_t:t1",128,0,31,0
.stabs "_G_ptrdiff_t:t1",128,0,35,0
.stabs "_G_sigset_t:t4",128,0,36,0
.stabs "_G_size_t:t4",128,0,40,0
.stabs "_G_time_t:t3",128,0,41,0
.stabs "_G_uid_t:t9",128,0,42,0
.stabs "_G_wchar_t:t3",128,0,46,0
.stabs "_G_ssize_t:t1",128,0,47,0
.stabs "_G_wint_t:t1",128,0,48,0
.stabs "_G_va_list:t22",128,0,49,0
.stabs "_G_int8_t:t10",128,0,53,0
.stabs "_G_uint8_t:t11",128,0,55,0
.stabs "_G_int16_t:t8",128,0,56,0
.stabs "_G_uint16_t:t9",128,0,57,0
.stabs "_G_int32_t:t3",128,0,58,0
.stabs "_G_uint32_t:t5",128,0,59,0
.stabs "_G_int64_t:t6",128,0,62,0
.stabs "_G_uint64_t:t7",128,0,63,0
.stabs "_IO_lock_t:T23=s8ptr:22,0,32;field1:8,32,16;\\",128,0,0,0
.stabs "field2:8,48,16;;",128,0,0,0
.stabs
"_IO_marker:T24=s12_next:25=*24,0,32;_sbuf:26=*27=xs_IO_FILE:,32,32;\\
",128,0,0,0
.stabs "_pos:1,64,32;;",128,0,0,0
.stabs
"_IO_FILE:T27=s84_flags:1,0,32;_IO_read_ptr:28=*2,32,32;\\",128,0,0,0
.stabs "_IO_read_end:28,64,32;_IO_read_base:28,96,32;\\",128,0,0,0
.stabs
"_IO_write_base:28,128,32;_IO_write_ptr:28,160,32;\\",128,0,0,0
.stabs "_IO_write_end:28,192,32;_IO_buf_base:28,224,32;\\",128,0,0,0
.stabs
"_IO_buf_end:28,256,32;_IO_save_base:28,288,32;_IO_backup_base:28,320,
32;\\",128,0,0,0
.stabs
"_IO_save_end:28,352,32;_markers:25,384,32;_chain:26,416,32;\\",128,0,
0,0
.stabs
"_jumps:29=*30=xs_IO_jump_t:,448,32;_fileno:1,480,32;\\",128,0,0,0
.stabs
"_blksize:1,512,32;_offset:3,544,32;_cur_column:9,576,16;\\",128,0,0,0
.stabs "_unused:2,592,8;_shortbuf:31=ar1;0;0;2,600,8;\\",128,0,0,0
.stabs "_IO_lock:23,608,64;;",128,0,0,0
.stabs "_IO_FILE:t27",128,0,217,0
.stabs "size_t:t4",128,0,71,0
.stabs "FILE:t27",128,0,76,0
.stabs "fpos_t:t3",128,0,77,0
.stabs " :T32=e_ISupper:256,_ISlower:512,_ISalpha:1024,\\",128,0,0,0
.stabs "_ISdigit:2048,_ISxdigit:4096,_ISspace:8192,\\",128,0,0,0
.stabs "_ISprint:16384,_ISgraph:32768,_ISblank:1,\\",128,0,0,0
.stabs "_IScntrl:2,_ISpunct:4,_ISalnum:3072,;",128,0,0,0
.stabs "ptrdiff_t:t1",128,0,116,0
.stabs "wchar_t:t3",128,0,240,0
.stabs "BOOL:t11",128,0,39,0
.stabs
"objc_selector:T33=s8sel_id:22,0,32;sel_types:34=*2,32,32;;",128,0,0,0
.stabs "SEL:t35=*33",128,0,51,0
.stabs
"objc_object:T36=s4class_pointer:37=*38=xsobjc_class:,0,32;;",128,0,0,
0
.stabs "id:t39=*36",128,0,68,0
.stabs "IMP:t40=*41=f39",128,0,74,0
.stabs "STR:t28",128,0,81,0
.stabs "MetaClass:t37",128,0,93,0
.stabs "Class:t37",128,0,94,0
.stabs
"objc_class:T38=s48class_pointer:37,0,32;super_class:37,32,32;\\",128,
0,0,0
.stabs "name:34,64,32;version:3,96,32;info:5,128,32;\\",128,0,0,0
.stabs
"instance_size:3,160,32;ivars:42=*43=xsobjc_ivar_list:,192,32;\\",128,
0,0,0
.stabs
"methods:44=*45=xsobjc_method_list:,224,32;dtable:46=*47=xssarray:,256
,32;\\",128,0,0,0
.stabs "subclass_list:37,288,32;sibling_class:37,320,32;\\",128,0,0,0
.stabs "protocols:48=*49=xsobjc_protocol_list:,352,32;;",128,0,0,0
.stabs
"objc_protocol:T50=s20class_pointer:37,0,32;protocol_name:28,32,32;\\"
,128,0,0,0
.stabs
"protocol_list:48,64,32;instance_methods:51=*52=xsobjc_method_descript
ion_list:,96,32;\\",128,0,0,0
.stabs "class_methods:51,128,32;;",128,0,0,0
.stabs "Protocol:t50",128,0,133,0
.stabs "retval_t:t22",128,0,139,0
.stabs "apply_t:t53=*54=f19",128,0,140,0
.stabs
"arglist_t:t55=*56=u4arg_ptr:28,0,32;arg_regs:57=ar1;0;3;2,0,32;;",128
,0,144,0
.stabs
"cache_node:T58=s12next:59=*58,0,32;key:60=*19,32,32;\\",128,0,0,0
.stabs "value:22,64,32;;",128,0,0,0
.stabs "node_ptr:t59",128,0,49,0
.stabs "hash_func_type:t61=*62=f4",128,0,61,0
.stabs "compare_func_type:t63=*64=f1",128,0,70,0
.stabs
"cache:T65=s28node_table:66=*59,0,32;size:4,32,32;\\",128,0,0,0
.stabs "used:4,64,32;mask:4,96,32;last_bucket:4,128,32;\\",128,0,0,0
.stabs "hash_func:61,160,32;compare_func:63,192,32;;",128,0,0,0
.stabs "cache_ptr:t67=*65",128,0,100,0
.stabs
"objc_method_description:T68=s8name:35,0,32;types:28,32,32;;",128,0,0,
0
.stabs
"objc_symtab:T69=s16sel_ref_cnt:5,0,32;refs:35,32,32;\\",128,0,0,0
.stabs
"cls_def_cnt:9,64,16;cat_def_cnt:9,80,16;defs:70=ar1;0;0;22,96,32;;",1
28,0,0,0
.stabs "Symtab:t69",128,0,104,0
.stabs "Symtab_t:t71=*69",128,0,104,0
.stabs
"objc_static_instances:T72=s4class_name:28,0,32;instances:73=ar1;0;-1;
39,32,0;;",128,0,0,0
.stabs "objc_module:T74=s20version:5,0,32;size:5,32,32;\\",128,0,0,0
.stabs
"name:34,64,32;statics:75=*76=*72,96,32;symtab:71,128,32;;",128,0,0,0
.stabs "Module:t74",128,0,141,0
.stabs "Module_t:t77=*74",128,0,141,0
.stabs "Ivar_t:t78=*79=xsobjc_ivar:",128,0,148,0
.stabs
"objc_ivar:T79=s12ivar_name:34,0,32;ivar_type:34,32,32;\\",128,0,0,0
.stabs "ivar_offset:1,64,32;;",128,0,0,0
.stabs
"objc_ivar_list:T43=s16ivar_count:1,0,32;ivar_list:80=ar1;0;0;79,32,96
;;",128,0,0,0
.stabs "IvarList:t43",128,0,168,0
.stabs "IvarList_t:t42",128,0,168,0
.stabs "Method:t81=xsobjc_method:",128,0,179,0
.stabs "Method_t:t82=*81",128,0,180,0
.stabs
"objc_method:T81=s12method_name:35,0,32;method_types:34,32,32;\\",128,
0,0,0
.stabs "method_imp:40,64,32;;",128,0,0,0
.stabs
"objc_method_list:T45=s20method_next:44,0,32;method_count:1,32,32;\\",
128,0,0,0
.stabs "method_list:83=ar1;0;0;81,64,96;;",128,0,0,0
.stabs "MethodList:t45",128,0,201,0
.stabs "MethodList_t:t44",128,0,201,0
.stabs
"objc_protocol_list:T49=s12next:48,0,32;count:1,32,32;\\",128,0,0,0
.stabs "list:84=ar1;0;0;85=*50,64,32;;",128,0,0,0
.stabs
"objc_category:T86=s20category_name:34,0,32;class_name:34,32,32;\\",12
8,0,0,0
.stabs
"instance_methods:44,64,32;class_methods:44,96,32;\\",128,0,0,0
.stabs "protocols:48,128,32;;",128,0,0,0
.stabs "Category:t86",128,0,276,0
.stabs "Category_t:t87=*86",128,0,276,0
.stabs "objc_super:T88=s8self:39,0,32;class:37,32,32;;",128,0,0,0
.stabs "Super:t88",128,0,287,0
.stabs "Super_t:t89=*88",128,0,287,0
.section .rodata
.LC0:
.string "Nil"
.stabs "objc_list:T90=s8head:22,0,32;tail:91=*90,32,32;;",128,0,0,0
.text
.align 16
.stabs "list_free:f19",36,0,143,list_free
.stabs "list:p91",160,0,142,8
.type list_free,@function
list_free:
.stabs "../objc/list.h",132,0,0,.Ltext1
.Ltext1:
.stabn 68,0,143,.LM1-list_free
.LM1:
pushl %ebp
movl %esp,%ebp
.stabn 68,0,144,.LM2-list_free
.LM2:
.LBB2:
cmpl $0,8(%ebp)
je .L106
.stabn 68,0,146,.LM3-list_free
.LM3:
.LBB3:
movl 8(%ebp),%eax
movl 4(%eax),%edx
pushl %edx
call list_free
addl $4,%esp
.stabn 68,0,147,.LM4-list_free
.LM4:
movl 8(%ebp),%eax
pushl %eax
call free
addl $4,%esp
.stabn 68,0,148,.LM5-list_free
.LM5:
.LBE3:
.L106:
.stabn 68,0,149,.LM6-list_free
.LM6:
.LBE2:
.stabn 68,0,149,.LM7-list_free
.LM7:
.L105:
movl %ebp,%esp
popl %ebp
ret
.Lfe1:
.size list_free,.Lfe1-list_free
.stabn 192,0,0,.LBB2-list_free
.stabn 192,0,0,.LBB3-list_free
.stabn 224,0,0,.LBE3-list_free
.stabn 224,0,0,.LBE2-list_free
.stabs "sidx:t4",128,0,82,0
.stabs "soffset:T92=s4boffset:4,0,16;eoffset:4,16,16;;",128,0,0,0
.stabs "sofftype:T93=u4off:92,0,32;idx:4,0,32;;",128,0,0,0
.stabs
"sbucket:T94=s132elems:95=ar1;0;31;22,0,1024;version:8,1024,16;;",128,
0,0,0
.stabs
"sarray:T47=s20buckets:96=*97=*94,0,32;empty_bucket:97,32,32;\\",128,0
,0,0
.stabs
"version:8,64,16;ref_count:8,80,16;is_copy_of:46,96,32;\\",128,0,0,0
.stabs "capacity:4,128,32;;",128,0,0,0
.globl __objc_uninstalled_dtable
.data
.stabs "__objc_uninstalled_dtable:G46",32,0,43,0
.align 4
.type __objc_uninstalled_dtable,@object
.size __objc_uninstalled_dtable,4
__objc_uninstalled_dtable:
.long 0
.stabs "__big:t98=s32many:99=ar1;0;7;39,0,256;;",128,0,53,0
.text
.align 16
.stabs "nil_method:F39",36,0,66,nil_method
.stabs "receiver:p39",160,0,65,8
.stabs "op:p35",160,0,65,12
.globl nil_method
.type nil_method,@function
nil_method:
.stabs "sendmsg.c",132,0,0,.Ltext2
.Ltext2:
.stabn 68,0,66,.LM8-nil_method
.LM8:
pushl %ebp
movl %esp,%ebp
.stabn 68,0,67,.LM9-nil_method
.LM9:
movl 8(%ebp),%eax
jmp .L113
.align 16
.stabn 68,0,68,.LM10-nil_method
.LM10:
.L113:
movl %ebp,%esp
popl %ebp
ret
.Lfe2:
.size nil_method,.Lfe2-nil_method
.align 16
.stabs "get_imp:F40",36,0,74,get_imp
.stabs "class:p37",160,0,73,8
.stabs "sel:p35",160,0,73,12
.globl get_imp
.type get_imp,@function
get_imp:
.stabn 68,0,74,.LM11-get_imp
.LM11:
pushl %ebp
movl %esp,%ebp
subl $12,%esp
pushl %esi
pushl %ebx
movl 8(%ebp),%ebx
movl 12(%ebp),%esi
.stabn 68,0,75,.LM12-get_imp
.LM12:
.LBB4:
.stabn 68,0,76,.LM13-get_imp
.LM13:
movl (%esi),%eax
pushl %eax
movl 32(%ebx),%eax
pushl %eax
call sarray_get
addl $8,%esp
movl %eax,%eax
movl %eax,-8(%ebp)
.stabn 68,0,77,.LM14-get_imp
.LM14:
cmpl $__objc_init_install_dtable,-8(%ebp)
jne .L115
.stabn 68,0,79,.LM15-get_imp
.LM15:
pushl %ebx
call __objc_install_dispatch_table_for_class
addl $4,%esp
.stabn 68,0,80,.LM16-get_imp
.LM16:
movl (%esi),%eax
pushl %eax
movl 32(%ebx),%eax
pushl %eax
call sarray_get
addl $8,%esp
movl %eax,%eax
movl %eax,-8(%ebp)
.L115:
.stabn 68,0,82,.LM17-get_imp
.LM17:
cmpl $0,-8(%ebp)
jne .L116
.stabn 68,0,84,.LM18-get_imp
.LM18:
.LBB5:
movl 4(%esi),%eax
movl %eax,-12(%ebp)
.stabn 68,0,85,.LM19-get_imp
.LM19:
cmpl $0,-12(%ebp)
je .L117
movl -12(%ebp),%eax
cmpb $91,(%eax)
je .L118
movl -12(%ebp),%eax
cmpb $40,(%eax)
je .L118
movl -12(%ebp),%eax
cmpb $123,(%eax)
je .L118
jmp .L117
.align 16
.L118:
.stabn 68,0,86,.LM20-get_imp
.LM20:
movl $__objc_block_forward,-8(%ebp)
jmp .L119
.align 16
.L117:
.stabn 68,0,88,.LM21-get_imp
.LM21:
movl $__objc_word_forward,-8(%ebp)
.L119:
.stabn 68,0,89,.LM22-get_imp
.LM22:
.LBE5:
.L116:
.stabn 68,0,90,.LM23-get_imp
.LM23:
movl -8(%ebp),%eax
jmp .L114
.align 16
.stabn 68,0,91,.LM24-get_imp
.LM24:
.LBE4:
.stabn 68,0,91,.LM25-get_imp
.LM25:
.L114:
leal -20(%ebp),%esp
popl %ebx
popl %esi
movl %ebp,%esp
popl %ebp
ret
.Lfe3:
.size get_imp,.Lfe3-get_imp
.stabs "class:r37",64,0,73,3
.stabs "sel:r35",64,0,73,6
.stabs "impl:40",128,0,75,-4
.stabs "res:22",128,0,76,-8
.stabn 192,0,0,.LBB4-get_imp
.stabs "t:34",128,0,84,-12
.stabn 192,0,0,.LBB5-get_imp
.stabn 224,0,0,.LBE5-get_imp
.stabn 224,0,0,.LBE4-get_imp
.align 16
.stabs "__objc_responds_to:F11",36,0,95,__objc_responds_to
.stabs "object:p39",160,0,94,8
.stabs "sel:p35",160,0,94,12
.globl __objc_responds_to
.type __objc_responds_to,@function
__objc_responds_to:
.stabn 68,0,95,.LM26-__objc_responds_to
.LM26:
pushl %ebp
movl %esp,%ebp
subl $4,%esp
pushl %esi
pushl %ebx
movl 8(%ebp),%esi
movl 12(%ebp),%ebx
.stabn 68,0,96,.LM27-__objc_responds_to
.LM27:
.LBB6:
movl (%ebx),%eax
pushl %eax
movl (%esi),%eax
movl 32(%eax),%edx
pushl %edx
call sarray_get
addl $8,%esp
movl %eax,%eax
movl %eax,-4(%ebp)
.stabn 68,0,97,.LM28-__objc_responds_to
.LM28:
cmpl $__objc_init_install_dtable,-4(%ebp)
jne .L121
.stabn 68,0,99,.LM29-__objc_responds_to
.LM29:
movl (%esi),%eax
pushl %eax
call __objc_install_dispatch_table_for_class
addl $4,%esp
.stabn 68,0,100,.LM30-__objc_responds_to
.LM30:
movl (%ebx),%eax
pushl %eax
movl (%esi),%eax
movl 32(%eax),%edx
pushl %edx
call sarray_get
addl $8,%esp
movl %eax,%eax
movl %eax,-4(%ebp)
.L121:
.stabn 68,0,102,.LM31-__objc_responds_to
.LM31:
cmpl $0,-4(%ebp)
setne %al
movzbl %al,%edx
movl %edx,%eax
jmp .L120
.align 16
.stabn 68,0,103,.LM32-__objc_responds_to
.LM32:
.LBE6:
.stabn 68,0,103,.LM33-__objc_responds_to
.LM33:
.L120:
leal -12(%ebp),%esp
popl %ebx
popl %esi
movl %ebp,%esp
popl %ebp
ret
.Lfe4:
.size __objc_responds_to,.Lfe4-__objc_responds_to
.stabs "object:r39",64,0,94,6
.stabs "sel:r35",64,0,94,3
.stabs "res:22",128,0,96,-4
.stabn 192,0,0,.LBB6-__objc_responds_to
.stabn 224,0,0,.LBE6-__objc_responds_to
.align 16
.stabs "objc_msg_lookup:F40",36,0,111,objc_msg_lookup
.stabs "receiver:p39",160,0,110,8
.stabs "op:p35",160,0,110,12
.globl objc_msg_lookup
.type objc_msg_lookup,@function
objc_msg_lookup:
.stabn 68,0,111,.LM34-objc_msg_lookup
.LM34:
pushl %ebp
movl %esp,%ebp
subl $8,%esp
pushl %esi
pushl %ebx
movl 8(%ebp),%ebx
movl 12(%ebp),%esi
.stabn 68,0,112,.LM35-objc_msg_lookup
.LM35:
.LBB7:
.stabn 68,0,113,.LM36-objc_msg_lookup
.LM36:
testl %ebx,%ebx
je .L123
.stabn 68,0,115,.LM37-objc_msg_lookup
.LM37:
movl (%esi),%eax
pushl %eax
movl (%ebx),%eax
movl 32(%eax),%edx
pushl %edx
call sarray_get
addl $8,%esp
movl %eax,-4(%ebp)
.stabn 68,0,116,.LM38-objc_msg_lookup
.LM38:
cmpl $0,-4(%ebp)
jne .L124
.stabn 68,0,118,.LM39-objc_msg_lookup
.LM39:
.LBB8:
movl 4(%esi),%eax
movl %eax,-8(%ebp)
.stabn 68,0,119,.LM40-objc_msg_lookup
.LM40:
cmpl $0,-8(%ebp)
je .L125
movl -8(%ebp),%eax
cmpb $91,(%eax)
je .L126
movl -8(%ebp),%eax
cmpb $40,(%eax)
je .L126
movl -8(%ebp),%eax
cmpb $123,(%eax)
je .L126
jmp .L125
.align 16
.L126:
.stabn 68,0,120,.LM41-objc_msg_lookup
.LM41:
movl $__objc_block_forward,-4(%ebp)
jmp .L127
.align 16
.L125:
.stabn 68,0,122,.LM42-objc_msg_lookup
.LM42:
movl $__objc_word_forward,-4(%ebp)
.L127:
.stabn 68,0,123,.LM43-objc_msg_lookup
.LM43:
.LBE8:
.L124:
.stabn 68,0,124,.LM44-objc_msg_lookup
.LM44:
movl -4(%ebp),%eax
jmp .L122
.align 16
.stabn 68,0,125,.LM45-objc_msg_lookup
.LM45:
jmp .L128
.align 16
.L123:
.stabn 68,0,127,.LM46-objc_msg_lookup
.LM46:
movl $nil_method,%eax
jmp .L122
.align 16
.L128:
.stabn 68,0,128,.LM47-objc_msg_lookup
.LM47:
.LBE7:
.stabn 68,0,128,.LM48-objc_msg_lookup
.LM48:
.L122:
leal -16(%ebp),%esp
popl %ebx
popl %esi
movl %ebp,%esp
popl %ebp
ret
.Lfe5:
.size objc_msg_lookup,.Lfe5-objc_msg_lookup
.stabs "receiver:r39",64,0,110,3
.stabs "op:r35",64,0,110,6
.stabs "result:40",128,0,112,-4
.stabn 192,0,0,.LBB7-objc_msg_lookup
.stabs "t:34",128,0,118,-8
.stabn 192,0,0,.LBB8-objc_msg_lookup
.stabn 224,0,0,.LBE8-objc_msg_lookup
.stabn 224,0,0,.LBE7-objc_msg_lookup
.align 16
.stabs "objc_msg_lookup_super:F40",36,0,132,objc_msg_lookup_super
.stabs "super:p89",160,0,131,8
.stabs "sel:p35",160,0,131,12
.globl objc_msg_lookup_super
.type objc_msg_lookup_super,@function
objc_msg_lookup_super:
.stabn 68,0,132,.LM49-objc_msg_lookup_super
.LM49:
pushl %ebp
movl %esp,%ebp
.stabn 68,0,133,.LM50-objc_msg_lookup_super
.LM50:
movl 8(%ebp),%eax
cmpl $0,(%eax)
je .L130
.stabn 68,0,134,.LM51-objc_msg_lookup_super
.LM51:
movl 12(%ebp),%eax
pushl %eax
movl 8(%ebp),%eax
movl 4(%eax),%edx
pushl %edx
call get_imp
addl $8,%esp
movl %eax,%edx
movl %edx,%eax
jmp .L129
.align 16
jmp .L131
.align 16
.L130:
.stabn 68,0,136,.LM52-objc_msg_lookup_super
.LM52:
movl $nil_method,%eax
jmp .L129
.align 16
.L131:
.stabn 68,0,137,.LM53-objc_msg_lookup_super
.LM53:
.L129:
movl %ebp,%esp
popl %ebp
ret
.Lfe6:
.size objc_msg_lookup_super,.Lfe6-objc_msg_lookup_super
.globl memcpy
.align 16
.stabs "objc_msg_sendv:F22",36,0,143,objc_msg_sendv
.stabs "object:p39",160,0,142,8
.stabs "op:p35",160,0,142,12
.stabs "arg_frame:p55",160,0,142,16
.globl objc_msg_sendv
.type objc_msg_sendv,@function
objc_msg_sendv:
.stabn 68,0,143,.LM54-objc_msg_sendv
.LM54:
pushl %ebp
movl %esp,%ebp
subl $124,%esp
pushl %edi
pushl %esi
pushl %ebx
.stabn 68,0,144,.LM55-objc_msg_sendv
.LM55:
.LBB9:
movl 12(%ebp),%eax
pushl %eax
movl 8(%ebp),%eax
movl (%eax),%edx
pushl %edx
call class_get_instance_method
addl $8,%esp
movl %eax,%eax
movl %eax,-4(%ebp)
.stabn 68,0,146,.LM56-objc_msg_sendv
.LM56:
leal -8(%ebp),%eax
pushl %eax
movl 16(%ebp),%eax
pushl %eax
movl -4(%ebp),%eax
pushl %eax
call method_get_first_argument
addl $12,%esp
movl %eax,%eax
movl 8(%ebp),%edx
movl %edx,(%eax)
.stabn 68,0,147,.LM57-objc_msg_sendv
.LM57:
leal -8(%ebp),%eax
pushl %eax
movl 16(%ebp),%eax
pushl %eax
call method_get_next_argument
addl $8,%esp
movl %eax,%eax
movl 12(%ebp),%edx
movl %edx,(%eax)
.stabn 68,0,148,.LM58-objc_msg_sendv
.LM58:
movl -4(%ebp),%ebx
movl -4(%ebp),%eax
pushl %eax
call method_get_sizeof_arguments
addl $4,%esp
movl %eax,%eax
movl 16(%ebp),%ecx
movl (%ecx),%edx
movl %esp,%esi
subl %eax,%esp
movl %esp,%ecx
pushl %eax
pushl %edx
pushl %ecx
call memcpy
addl $12,%esp
movl 16(%ebp),%edx
addl $4,%edx
movl (%edx),%eax
movl 16(%ebp),%ecx
addl $8,%ecx
movl (%ecx),%edx
movl 16(%ebp),%edi
addl $12,%edi
movl (%edi),%ecx
movl 8(%ebx),%ebx
call *%ebx
movl %eax,-124(%ebp)
movl %edx,-120(%ebp)
fstpt -116(%ebp)
movl %esi,%esp
leal -124(%ebp),%edx
movl %edx,%eax
jmp .L132
.align 16
.stabn 68,0,151,.LM59-objc_msg_sendv
.LM59:
.LBE9:
.stabn 68,0,151,.LM60-objc_msg_sendv
.LM60:
.L132:
leal -136(%ebp),%esp
popl %ebx
popl %esi
popl %edi
movl %ebp,%esp
popl %ebp
ret
.Lfe7:
.size objc_msg_sendv,.Lfe7-objc_msg_sendv
.stabs "m:82",128,0,144,-4
.stabs "type:34",128,0,145,-8
.stabn 192,0,0,.LBB9-objc_msg_sendv
.stabn 224,0,0,.LBE9-objc_msg_sendv
.align 16
.stabs
"__objc_init_dispatch_tables:F19",36,0,154,__objc_init_dispatch_tables
.globl __objc_init_dispatch_tables
.type __objc_init_dispatch_tables,@function
__objc_init_dispatch_tables:
.stabn 68,0,154,.LM61-__objc_init_dispatch_tables
.LM61:
pushl %ebp
movl %esp,%ebp
.stabn 68,0,155,.LM62-__objc_init_dispatch_tables
.LM62:
pushl $__objc_init_install_dtable
pushl $200
call sarray_new
addl $8,%esp
movl %eax,%eax
movl %eax,__objc_uninstalled_dtable
.stabn 68,0,157,.LM63-__objc_init_dispatch_tables
.LM63:
.L133:
movl %ebp,%esp
popl %ebp
ret
.Lfe8:
.size
__objc_init_dispatch_tables,.Lfe8-__objc_init_dispatch_tables
.section .rodata
.LC1:
.string "CLS_ISCLASS(receiver->class_pointer)"
.LC2:
.string "sendmsg.c"
.LC3:
.string "%s:%u: failed assertion `%s'\n"
.LC4:
.string "CLS_ISCLASS((Class)receiver)"
.LC5:
.string "CLS_ISMETA(receiver->class_pointer)"
.LC6:
.string "initialize"
.text
.align 16
.stabs
"__objc_init_install_dtable:f19",36,0,164,__objc_init_install_dtable
.stabs "receiver:p39",160,0,163,8
.stabs "op:p35",160,0,163,12
.type __objc_init_install_dtable,@function
__objc_init_install_dtable:
.stabn 68,0,164,.LM64-__objc_init_install_dtable
.LM64:
pushl %ebp
movl %esp,%ebp
subl $156,%esp
pushl %edi
pushl %esi
pushl %ebx
movl %eax,-32(%ebp)
movl %edx,-28(%ebp)
movl %ecx,-24(%ebp)
leal 8(%ebp),%eax
movl %eax,-36(%ebp)
leal -36(%ebp),%ebx
.stabn 68,0,165,.LM65-__objc_init_install_dtable
.LM65:
.LBB10:
.stabn 68,0,172,.LM66-__objc_init_install_dtable
.LM66:
movl 8(%ebp),%eax
movl (%eax),%edx
movl 32(%edx),%eax
cmpl %eax,__objc_uninstalled_dtable
je .L136
.stabn 68,0,173,.LM67-__objc_init_install_dtable
.LM67:
jmp .L135
.align 16
.L136:
.stabn 68,0,175,.LM68-__objc_init_install_dtable
.LM68:
movl 8(%ebp),%eax
cmpl $0,(%eax)
je .L137
movl 8(%ebp),%eax
movl (%eax),%edx
movl 16(%edx),%eax
andl $1,%eax
testl %eax,%eax
je .L137
.stabn 68,0,178,.LM69-__objc_init_install_dtable
.LM69:
movl 8(%ebp),%eax
cmpl $0,(%eax)
je .L140
movl 8(%ebp),%eax
movl (%eax),%edx
movl 16(%edx),%eax
andl $1,%eax
testl %eax,%eax
jne .L138
jmp .L140
.align 16
.L140:
pushl $.LC1
pushl $178
pushl $.LC2
pushl $.LC3
call __eprintf
addl $16,%esp
jmp .L139
.align 16
.L138:
.L139:
.stabn 68,0,181,.LM70-__objc_init_install_dtable
.LM70:
movl 8(%ebp),%eax
movl (%eax),%edx
pushl %edx
call __objc_install_dispatch_table_for_class
addl $4,%esp
.stabn 68,0,185,.LM71-__objc_init_install_dtable
.LM71:
movl 8(%ebp),%eax
movl (%eax),%edx
pushl %edx
call __objc_send_initialize
addl $4,%esp
.stabn 68,0,186,.LM72-__objc_init_install_dtable
.LM72:
jmp .L141
.align 16
.L137:
.stabn 68,0,190,.LM73-__objc_init_install_dtable
.LM73:
cmpl $0,8(%ebp)
je .L144
movl 8(%ebp),%eax
movl 16(%eax),%edx
andl $1,%edx
testl %edx,%edx
jne .L142
jmp .L144
.align 16
.L144:
pushl $.LC4
pushl $190
pushl $.LC2
pushl $.LC3
call __eprintf
addl $16,%esp
jmp .L143
.align 16
.L142:
.L143:
.stabn 68,0,191,.LM74-__objc_init_install_dtable
.LM74:
movl 8(%ebp),%eax
cmpl $0,(%eax)
je .L147
movl 8(%ebp),%eax
movl (%eax),%edx
movl 16(%edx),%eax
andl $2,%eax
testl %eax,%eax
jne .L145
jmp .L147
.align 16
.L147:
pushl $.LC5
pushl $191
pushl $.LC2
pushl $.LC3
call __eprintf
addl $16,%esp
jmp .L146
.align 16
.L145:
.L146:
.stabn 68,0,194,.LM75-__objc_init_install_dtable
.LM75:
movl 8(%ebp),%eax
movl (%eax),%edx
pushl %edx
call __objc_install_dispatch_table_for_class
addl $4,%esp
.stabn 68,0,196,.LM76-__objc_init_install_dtable
.LM76:
pushl $.LC6
movl 12(%ebp),%eax
pushl %eax
call sel_get_name
addl $4,%esp
movl %eax,%eax
pushl %eax
call strcmp
addl $8,%esp
movl %eax,%eax
testl %eax,%eax
je .L148
.stabn 68,0,197,.LM77-__objc_init_install_dtable
.LM77:
movl 8(%ebp),%eax
pushl %eax
call __objc_send_initialize
addl $4,%esp
jmp .L149
.align 16
.L148:
.stabn 68,0,199,.LM78-__objc_init_install_dtable
.LM78:
movl 8(%ebp),%eax
movl 8(%ebp),%edx
movl 16(%edx),%ecx
orb $4,%cl
movl %ecx,16(%eax)
.L149:
.stabn 68,0,200,.LM79-__objc_init_install_dtable
.LM79:
.L141:
nop
.L135:
.stabn 68,0,205,.LM80-__objc_init_install_dtable
.LM80:
movl 12(%ebp),%eax
pushl %eax
movl 8(%ebp),%eax
movl (%eax),%edx
pushl %edx
call get_imp
addl $8,%esp
movl %eax,%eax
movl %eax,-12(%ebp)
.stabn 68,0,207,.LM81-__objc_init_install_dtable
.LM81:
movl %ebx,-16(%ebp)
.stabn 68,0,208,.LM82-__objc_init_install_dtable
.LM82:
movl -16(%ebp),%edx
movl (%edx),%eax
movl %esp,%ebx
addl $-96,%esp
movl %esp,%edx
movl %edx,%edi
movl %eax,%esi
cld
movl $24,%ecx
rep
movsl
movl -16(%ebp),%edx
addl $4,%edx
movl (%edx),%eax
movl -16(%ebp),%ecx
addl $8,%ecx
movl %ecx,-156(%ebp)
movl -156(%ebp),%ecx
movl (%ecx),%edx
movl -16(%ebp),%esi
addl $12,%esi
movl (%esi),%ecx
movl -12(%ebp),%esi
call *%esi
movl %eax,-152(%ebp)
movl %edx,-148(%ebp)
fstpt -144(%ebp)
movl %ebx,%esp
leal -152(%ebp),%eax
movl %eax,-20(%ebp)
.stabn 68,0,209,.LM83-__objc_init_install_dtable
.LM83:
cmpl $0,-20(%ebp)
je .L150
.stabn 68,0,210,.LM84-__objc_init_install_dtable
.LM84:
movl -20(%ebp),%ecx
movl %ecx,-156(%ebp)
movl -156(%ebp),%ecx
movl (%ecx),%eax
movl 4(%ecx),%edx
movl -20(%ebp),%ecx
addl $8,%ecx
movl %ecx,-156(%ebp)
movl -156(%ebp),%ecx
fldt (%ecx)
fstp %st(0)
jmp .L134
.align 16
jmp .L151
.align 16
.L150:
.stabn 68,0,212,.LM85-__objc_init_install_dtable
.LM85:
jmp .L134
.align 16
.L151:
.stabn 68,0,214,.LM86-__objc_init_install_dtable
.LM86:
.LBE10:
.stabn 68,0,214,.LM87-__objc_init_install_dtable
.LM87:
.L134:
leal -168(%ebp),%esp
popl %ebx
popl %esi
popl %edi
movl %ebp,%esp
popl %ebp
ret
.Lfe9:
.size
__objc_init_install_dtable,.Lfe9-__objc_init_install_dtable
.stabs "imp:40",128,0,166,-12
.stabs "args:22",128,0,167,-16
.stabs "result:22",128,0,168,-20
.stabn 192,0,0,.LBB10-__objc_init_install_dtable
.stabn 224,0,0,.LBE10-__objc_init_install_dtable
.section .rodata
.LC7:
.string "__objc_uninstalled_dtable"
.text
.align 16
.stabs
"__objc_install_premature_dtable:F19",36,0,219,__objc_install_prematur
e_dtable
.stabs "class:p37",160,0,218,8
.globl __objc_install_premature_dtable
.type __objc_install_premature_dtable,@function
__objc_install_premature_dtable:
.stabn 68,0,219,.LM88-__objc_install_premature_dtable
.LM88:
pushl %ebp
movl %esp,%ebp
.stabn 68,0,220,.LM89-__objc_install_premature_dtable
.LM89:
cmpl $0,__objc_uninstalled_dtable
jne .L153
pushl $.LC7
pushl $220
pushl $.LC2
pushl $.LC3
call __eprintf
addl $16,%esp
jmp .L154
.align 16
.L153:
.L154:
.stabn 68,0,221,.LM90-__objc_install_premature_dtable
.LM90:
movl 8(%ebp),%eax
movl __objc_uninstalled_dtable,%edx
movl %edx,32(%eax)
.stabn 68,0,222,.LM91-__objc_install_premature_dtable
.LM91:
.L152:
movl %ebp,%esp
popl %ebp
ret
.Lfe10:
.size
__objc_install_premature_dtable,.Lfe10-__objc_install_premature_dtable
.section .rodata
.LC8:
.string "CLS_ISCLASS(class)"
.LC9:
.string "!CLS_ISMETA(class)"
.text
.align 16
.stabs "__objc_send_initialize:f19",36,0,226,__objc_send_initialize
.stabs "class:p37",160,0,225,8
.type __objc_send_initialize,@function
__objc_send_initialize:
.stabn 68,0,226,.LM92-__objc_send_initialize
.LM92:
pushl %ebp
movl %esp,%ebp
subl $24,%esp
pushl %esi
pushl %ebx
.stabn 68,0,228,.LM93-__objc_send_initialize
.LM93:
.LBB11:
cmpl $0,8(%ebp)
je .L158
movl 8(%ebp),%eax
movl 16(%eax),%edx
andl $1,%edx
testl %edx,%edx
jne .L156
jmp .L158
.align 16
.L158:
pushl $.LC8
pushl $228
pushl $.LC2
pushl $.LC3
call __eprintf
addl $16,%esp
jmp .L157
.align 16
.L156:
.L157:
.stabn 68,0,229,.LM94-__objc_send_initialize
.LM94:
cmpl $0,8(%ebp)
je .L159
movl 8(%ebp),%eax
movl 16(%eax),%edx
andl $2,%edx
testl %edx,%edx
je .L159
pushl $.LC9
pushl $229
pushl $.LC2
pushl $.LC3
call __eprintf
addl $16,%esp
jmp .L160
.align 16
.L159:
.L160:
.stabn 68,0,231,.LM95-__objc_send_initialize
.LM95:
movl 8(%ebp),%eax
movl 16(%eax),%edx
andl $4,%edx
testl %edx,%edx
jne .L161
.stabn 68,0,233,.LM96-__objc_send_initialize
.LM96:
movl 8(%ebp),%eax
movl 8(%ebp),%edx
movl 16(%edx),%esi
orl $4,%esi
movl %esi,16(%eax)
.stabn 68,0,234,.LM97-__objc_send_initialize
.LM97:
movl 8(%ebp),%edx
movl (%edx),%eax
movl 8(%ebp),%edx
movl (%edx),%ecx
movl 16(%ecx),%esi
orl $4,%esi
movl %esi,16(%eax)
.stabn 68,0,236,.LM98-__objc_send_initialize
.LM98:
movl 8(%ebp),%eax
cmpl $0,4(%eax)
je .L162
.stabn 68,0,237,.LM99-__objc_send_initialize
.LM99:
movl 8(%ebp),%eax
movl 4(%eax),%edx
pushl %edx
call __objc_send_initialize
addl $4,%esp
.L162:
.stabn 68,0,240,.LM100-__objc_send_initialize
.LM100:
.LBB12:
pushl $.LC6
call sel_register_name
addl $4,%esp
movl %eax,%eax
movl %eax,-4(%ebp)
.stabn 68,0,241,.LM101-__objc_send_initialize
.LM101:
movl 8(%ebp),%eax
movl %eax,-8(%ebp)
.stabn 68,0,242,.LM102-__objc_send_initialize
.LM102:
movl $0,-12(%ebp)
.stabn 68,0,244,.LM103-__objc_send_initialize
.LM103:
.L163:
cmpl $0,-12(%ebp)
jne .L166
cmpl $0,-8(%ebp)
jne .L165
jmp .L166
.align 16
.L166:
jmp .L164
.align 16
.L165:
.stabn 68,0,245,.LM104-__objc_send_initialize
.LM104:
.LBB13:
movl -8(%ebp),%eax
movl (%eax),%edx
movl 28(%edx),%eax
movl %eax,-16(%ebp)
.stabn 68,0,247,.LM105-__objc_send_initialize
.LM105:
.L167:
cmpl $0,-12(%ebp)
jne .L170
cmpl $0,-16(%ebp)
jne .L169
jmp .L170
.align 16
.L170:
jmp .L168
.align 16
.L169:
.stabn 68,0,248,.LM106-__objc_send_initialize
.LM106:
.LBB14:
.stabn 68,0,251,.LM107-__objc_send_initialize
.LM107:
movl $0,-20(%ebp)
.L171:
movl -16(%ebp),%eax
movl -20(%ebp),%edx
cmpl %edx,4(%eax)
jg .L174
jmp .L172
.align 16
.L174:
.stabn 68,0,252,.LM108-__objc_send_initialize
.LM108:
movl -20(%ebp),%edx
movl %edx,%eax
addl %eax,%eax
addl %edx,%eax
leal 0(,%eax,4),%edx
leal 8(%edx),%eax
movl -16(%ebp),%esi
addl %eax,%esi
movl %esi,-24(%ebp)
.stabn 68,0,253,.LM109-__objc_send_initialize
.LM109:
movl -24(%ebp),%eax
movl (%eax),%edx
movl -4(%ebp),%eax
movl (%edx),%edx
cmpl %edx,(%eax)
jne .L175
.stabn 68,0,254,.LM110-__objc_send_initialize
.LM110:
movl -24(%ebp),%eax
movl 8(%eax),%edx
movl %edx,-12(%ebp)
.stabn 68,0,255,.LM111-__objc_send_initialize
.LM111:
jmp .L172
.align 16
.L175:
.stabn 68,0,251,.LM112-__objc_send_initialize
.LM112:
.L173:
incl -20(%ebp)
jmp .L171
.align 16
.L172:
.stabn 68,0,259,.LM113-__objc_send_initialize
.LM113:
movl -16(%ebp),%eax
movl (%eax),%edx
movl %edx,-16(%ebp)
.stabn 68,0,261,.LM114-__objc_send_initialize
.LM114:
.LBE14:
jmp .L167
.align 16
.L168:
.stabn 68,0,263,.LM115-__objc_send_initialize
.LM115:
movl -8(%ebp),%eax
movl 4(%eax),%edx
movl %edx,-8(%ebp)
.stabn 68,0,264,.LM116-__objc_send_initialize
.LM116:
.LBE13:
jmp .L163
.align 16
.L164:
.stabn 68,0,265,.LM117-__objc_send_initialize
.LM117:
cmpl $0,-12(%ebp)
je .L176
.stabn 68,0,266,.LM118-__objc_send_initialize
.LM118:
movl -4(%ebp),%eax
pushl %eax
movl 8(%ebp),%eax
pushl %eax
movl -12(%ebp),%ebx
call *%ebx
addl $8,%esp
.L176:
.stabn 68,0,268,.LM119-__objc_send_initialize
.LM119:
.LBE12:
.L161:
.stabn 68,0,270,.LM120-__objc_send_initialize
.LM120:
.LBE11:
.stabn 68,0,270,.LM121-__objc_send_initialize
.LM121:
.L155:
leal -32(%ebp),%esp
popl %ebx
popl %esi
movl %ebp,%esp
popl %ebp
ret
.Lfe11:
.size __objc_send_initialize,.Lfe11-__objc_send_initialize
.stabn 192,0,0,.LBB11-__objc_send_initialize
.stabs "op:35",128,0,240,-4
.stabs "tmpclass:37",128,0,241,-8
.stabs "imp:40",128,0,242,-12
.stabn 192,0,0,.LBB12-__objc_send_initialize
.stabs "method_list:44",128,0,245,-16
.stabn 192,0,0,.LBB13-__objc_send_initialize
.stabs "i:1",128,0,248,-20
.stabs "method:82",128,0,249,-24
.stabn 192,0,0,.LBB14-__objc_send_initialize
.stabn 224,0,0,.LBE14-__objc_send_initialize
.stabn 224,0,0,.LBE13-__objc_send_initialize
.stabn 224,0,0,.LBE12-__objc_send_initialize
.stabn 224,0,0,.LBE11-__objc_send_initialize
.align 16
.stabs
"__objc_install_dispatch_table_for_class:f19",36,0,274,__objc_install_
dispatch_table_for_class
.stabs "class:p37",160,0,273,8
.type __objc_install_dispatch_table_for_class,@function
__objc_install_dispatch_table_for_class:
.stabn 68,0,274,.LM122-__objc_install_dispatch_table_for_class
.LM122:
pushl %ebp
movl %esp,%ebp
subl $16,%esp
.stabn 68,0,275,.LM123-__objc_install_dispatch_table_for_class
.LM123:
.LBB15:
.stabn 68,0,281,.LM124-__objc_install_dispatch_table_for_class
.LM124:
movl 8(%ebp),%eax
movl 16(%eax),%edx
andl $8,%edx
testl %edx,%edx
jne .L178
.stabn 68,0,282,.LM125-__objc_install_dispatch_table_for_class
.LM125:
call __objc_resolve_class_links
.L178:
.stabn 68,0,284,.LM126-__objc_install_dispatch_table_for_class
.LM126:
movl 8(%ebp),%eax
movl 4(%eax),%edx
movl %edx,-4(%ebp)
.stabn 68,0,286,.LM127-__objc_install_dispatch_table_for_class
.LM127:
cmpl $0,-4(%ebp)
je .L179
movl -4(%ebp),%eax
movl 32(%eax),%edx
cmpl %edx,__objc_uninstalled_dtable
jne .L179
.stabn 68,0,287,.LM128-__objc_install_dispatch_table_for_class
.LM128:
movl -4(%ebp),%eax
pushl %eax
call __objc_install_dispatch_table_for_class
addl $4,%esp
.L179:
.stabn 68,0,290,.LM129-__objc_install_dispatch_table_for_class
.LM129:
cmpl $0,-4(%ebp)
jne .L180
.stabn 68,0,292,.LM130-__objc_install_dispatch_table_for_class
.LM130:
pushl $0
movl __objc_selector_max_index,%eax
pushl %eax
call sarray_new
addl $8,%esp
movl %eax,%eax
movl 8(%ebp),%edx
movl %eax,32(%edx)
.stabn 68,0,293,.LM131-__objc_install_dispatch_table_for_class
.LM131:
jmp .L181
.align 16
.L180:
.stabn 68,0,295,.LM132-__objc_install_dispatch_table_for_class
.LM132:
movl -4(%ebp),%eax
movl 32(%eax),%edx
pushl %edx
call sarray_lazy_copy
addl $4,%esp
movl %eax,%eax
movl 8(%ebp),%edx
movl %eax,32(%edx)
.L181:
.stabn 68,0,297,.LM133-__objc_install_dispatch_table_for_class
.LM133:
movl 8(%ebp),%eax
movl 28(%eax),%edx
movl %edx,-8(%ebp)
.L182:
cmpl $0,-8(%ebp)
jne .L185
jmp .L183
.align 16
.L185:
.stabn 68,0,299,.LM134-__objc_install_dispatch_table_for_class
.LM134:
movl -8(%ebp),%eax
movl 4(%eax),%ecx
decl %ecx
movl %ecx,-12(%ebp)
.stabn 68,0,300,.LM135-__objc_install_dispatch_table_for_class
.LM135:
.L186:
cmpl $0,-12(%ebp)
jge .L188
jmp .L187
.align 16
.L188:
.stabn 68,0,302,.LM136-__objc_install_dispatch_table_for_class
.LM136:
.LBB16:
movl -12(%ebp),%edx
movl %edx,%eax
addl %eax,%eax
addl %edx,%eax
leal 0(,%eax,4),%edx
leal 8(%edx),%eax
movl -8(%ebp),%ecx
addl %eax,%ecx
movl %ecx,-16(%ebp)
.stabn 68,0,303,.LM137-__objc_install_dispatch_table_for_class
.LM137:
movl -16(%ebp),%eax
movl 8(%eax),%edx
pushl %edx
movl -16(%ebp),%eax
movl (%eax),%edx
movl (%edx),%eax
pushl %eax
movl 8(%ebp),%eax
movl 32(%eax),%edx
pushl %edx
call sarray_at_put_safe
addl $12,%esp
.stabn 68,0,306,.LM138-__objc_install_dispatch_table_for_class
.LM138:
decl -12(%ebp)
.stabn 68,0,307,.LM139-__objc_install_dispatch_table_for_class
.LM139:
.LBE16:
jmp .L186
.align 16
.L187:
.stabn 68,0,297,.LM140-__objc_install_dispatch_table_for_class
.LM140:
.L184:
movl -8(%ebp),%eax
movl (%eax),%edx
movl %edx,-8(%ebp)
jmp .L182
.align 16
.L183:
.stabn 68,0,309,.LM141-__objc_install_dispatch_table_for_class
.LM141:
.LBE15:
.stabn 68,0,309,.LM142-__objc_install_dispatch_table_for_class
.LM142:
.L177:
movl %ebp,%esp
popl %ebp
ret
.Lfe12:
.size
__objc_install_dispatch_table_for_class,.Lfe12-__objc_install_dispatch
_table_for_class
.stabs "super:37",128,0,275,-4
.stabs "mlist:44",128,0,276,-8
.stabs "counter:1",128,0,277,-12
.stabn 192,0,0,.LBB15-__objc_install_dispatch_table_for_class
.stabs "method:82",128,0,302,-16
.stabn 192,0,0,.LBB16-__objc_install_dispatch_table_for_class
.stabn 224,0,0,.LBE16-__objc_install_dispatch_table_for_class
.stabn 224,0,0,.LBE15-__objc_install_dispatch_table_for_class
.align 16
.stabs
"__objc_update_dispatch_table_for_class:F19",36,0,312,__objc_update_di
spatch_table_for_class
.stabs "class:p37",160,0,311,8
.globl __objc_update_dispatch_table_for_class
.type __objc_update_dispatch_table_for_class,@function
__objc_update_dispatch_table_for_class:
.stabn 68,0,312,.LM143-__objc_update_dispatch_table_for_class
.LM143:
pushl %ebp
movl %esp,%ebp
subl $4,%esp
.stabn 68,0,313,.LM144-__objc_update_dispatch_table_for_class
.LM144:
.LBB17:
.stabn 68,0,316,.LM145-__objc_update_dispatch_table_for_class
.LM145:
movl 8(%ebp),%eax
movl 32(%eax),%edx
cmpl %edx,__objc_uninstalled_dtable
jne .L190
.stabn 68,0,317,.LM146-__objc_update_dispatch_table_for_class
.LM146:
jmp .L189
.align 16
.L190:
.stabn 68,0,319,.LM147-__objc_update_dispatch_table_for_class
.LM147:
movl 8(%ebp),%eax
movl 32(%eax),%edx
pushl %edx
call sarray_free
addl $4,%esp
.stabn 68,0,320,.LM148-__objc_update_dispatch_table_for_class
.LM148:
movl 8(%ebp),%eax
pushl %eax
call __objc_install_premature_dtable
addl $4,%esp
.stabn 68,0,321,.LM149-__objc_update_dispatch_table_for_class
.LM149:
movl 8(%ebp),%eax
pushl %eax
call __objc_install_dispatch_table_for_class
addl $4,%esp
.stabn 68,0,323,.LM150-__objc_update_dispatch_table_for_class
.LM150:
movl 8(%ebp),%eax
cmpl $0,36(%eax)
je .L191
.stabn 68,0,324,.LM151-__objc_update_dispatch_table_for_class
.LM151:
movl 8(%ebp),%eax
movl 36(%eax),%edx
movl %edx,-4(%ebp)
.L192:
cmpl $0,-4(%ebp)
jne .L195
jmp .L193
.align 16
.L195:
.stabn 68,0,325,.LM152-__objc_update_dispatch_table_for_class
.LM152:
movl -4(%ebp),%eax
pushl %eax
call __objc_update_dispatch_table_for_class
addl $4,%esp
.stabn 68,0,324,.LM153-__objc_update_dispatch_table_for_class
.LM153:
.L194:
movl -4(%ebp),%eax
movl 40(%eax),%edx
movl %edx,-4(%ebp)
jmp .L192
.align 16
.L193:
.L191:
.stabn 68,0,327,.LM154-__objc_update_dispatch_table_for_class
.LM154:
.LBE17:
.stabn 68,0,327,.LM155-__objc_update_dispatch_table_for_class
.LM155:
.L189:
movl %ebp,%esp
popl %ebp
ret
.Lfe13:
.size
__objc_update_dispatch_table_for_class,.Lfe13-__objc_update_dispatch_t
able_for_class
.stabs "next:37",128,0,313,-4
.stabn 192,0,0,.LBB17-__objc_update_dispatch_table_for_class
.stabn 224,0,0,.LBE17-__objc_update_dispatch_table_for_class
.data
.align 4
.type initialize_sel.96,@object
.size initialize_sel.96,4
initialize_sel.96:
.long 0
.section .rodata
.LC10:
.string "!list->method_next"
.LC11:
.string "attempt to add a existing method: %s\n"
.text
.align 16
.stabs "class_add_method_list:F19",36,0,339,class_add_method_list
.stabs "class:p37",160,0,338,8
.stabs "list:p44",160,0,338,12
.globl class_add_method_list
.type class_add_method_list,@function
class_add_method_list:
.stabn 68,0,339,.LM156-class_add_method_list
.LM156:
pushl %ebp
movl %esp,%ebp
subl $8,%esp
pushl %ebx
.stabn 68,0,340,.LM157-class_add_method_list
.LM157:
.LBB18:
.stabn 68,0,342,.LM158-class_add_method_list
.LM158:
cmpl $0,initialize_sel.96
jne .L197
.stabn 68,0,343,.LM159-class_add_method_list
.LM159:
pushl $.LC6
call sel_register_name
addl $4,%esp
movl %eax,%eax
movl %eax,initialize_sel.96
.L197:
.stabn 68,0,346,.LM160-class_add_method_list
.LM160:
movl 12(%ebp),%eax
cmpl $0,(%eax)
je .L198
pushl $.LC10
pushl $346
pushl $.LC2
pushl $.LC3
call __eprintf
addl $16,%esp
jmp .L199
.align 16
.L198:
.L199:
.stabn 68,0,349,.LM161-class_add_method_list
.LM161:
movl $0,-4(%ebp)
.L200:
movl 12(%ebp),%eax
movl -4(%ebp),%edx
cmpl %edx,4(%eax)
jg .L203
jmp .L201
.align 16
.L203:
.stabn 68,0,351,.LM162-class_add_method_list
.LM162:
.LBB19:
movl -4(%ebp),%edx
movl %edx,%eax
addl %eax,%eax
addl %edx,%eax
leal 0(,%eax,4),%edx
leal 8(%edx),%eax
movl 12(%ebp),%ebx
addl %eax,%ebx
movl %ebx,-8(%ebp)
.stabn 68,0,353,.LM163-class_add_method_list
.LM163:
movl -8(%ebp),%eax
cmpl $0,(%eax)
je .L204
.stabn 68,0,356,.LM164-class_add_method_list
.LM164:
movl -8(%ebp),%eax
movl 4(%eax),%edx
pushl %edx
movl -8(%ebp),%eax
movl (%eax),%edx
pushl %edx
call sel_register_typed_name
addl $8,%esp
movl %eax,%eax
movl -8(%ebp),%edx
movl %eax,(%edx)
.stabn 68,0,360,.LM165-class_add_method_list
.LM165:
movl -8(%ebp),%eax
movl (%eax),%edx
pushl %edx
movl 8(%ebp),%eax
movl 28(%eax),%edx
pushl %edx
call search_for_method_in_list
addl $8,%esp
movl %eax,%eax
testl %eax,%eax
je .L205
movl -8(%ebp),%eax
movl (%eax),%edx
movl initialize_sel.96,%eax
movl (%edx),%edx
cmpl %edx,(%eax)
je .L205
.stabn 68,0,365,.LM166-class_add_method_list
.LM166:
movl -8(%ebp),%eax
movl (%eax),%edx
pushl %edx
call sel_get_name
addl $4,%esp
movl %eax,%eax
pushl %eax
pushl $.LC11
pushl $_IO_stderr_
call fprintf
addl $12,%esp
.stabn 68,0,367,.LM167-class_add_method_list
.LM167:
movl -8(%ebp),%eax
movl $0,(%eax)
.L205:
.L204:
.stabn 68,0,370,.LM168-class_add_method_list
.LM168:
.LBE19:
.stabn 68,0,349,.LM169-class_add_method_list
.LM169:
.L202:
incl -4(%ebp)
jmp .L200
.align 16
.L201:
.stabn 68,0,373,.LM170-class_add_method_list
.LM170:
movl 12(%ebp),%eax
movl 8(%ebp),%edx
movl 28(%edx),%ecx
movl %ecx,(%eax)
.stabn 68,0,374,.LM171-class_add_method_list
.LM171:
movl 8(%ebp),%eax
movl 12(%ebp),%edx
movl %edx,28(%eax)
.stabn 68,0,375,.LM172-class_add_method_list
.LM172:
.LBE18:
.stabn 68,0,375,.LM173-class_add_method_list
.LM173:
.L196:
movl -12(%ebp),%ebx
movl %ebp,%esp
popl %ebp
ret
.Lfe14:
.size class_add_method_list,.Lfe14-class_add_method_list
.stabs "i:1",128,0,340,-4
.stabs "initialize_sel:V35",38,0,341,initialize_sel.96
.stabn 192,0,0,.LBB18-class_add_method_list
.stabs "method:82",128,0,351,-8
.stabn 192,0,0,.LBB19-class_add_method_list
.stabn 224,0,0,.LBE19-class_add_method_list
.stabn 224,0,0,.LBE18-class_add_method_list
.align 16
.stabs
"class_get_instance_method:F82",36,0,380,class_get_instance_method
.stabs "class:p37",160,0,379,8
.stabs "op:p35",160,0,379,12
.globl class_get_instance_method
.type class_get_instance_method,@function
class_get_instance_method:
.stabn 68,0,380,.LM174-class_get_instance_method
.LM174:
pushl %ebp
movl %esp,%ebp
.stabn 68,0,381,.LM175-class_get_instance_method
.LM175:
movl 12(%ebp),%eax
pushl %eax
movl 8(%ebp),%eax
pushl %eax
call search_for_method_in_hierarchy
addl $8,%esp
movl %eax,%edx
movl %edx,%eax
jmp .L206
.align 16
.stabn 68,0,382,.LM176-class_get_instance_method
.LM176:
.L206:
movl %ebp,%esp
popl %ebp
ret
.Lfe15:
.size
class_get_instance_method,.Lfe15-class_get_instance_method
.align 16
.stabs "class_get_class_method:F82",36,0,386,class_get_class_method
.stabs "class:p37",160,0,385,8
.stabs "op:p35",160,0,385,12
.globl class_get_class_method
.type class_get_class_method,@function
class_get_class_method:
.stabn 68,0,386,.LM177-class_get_class_method
.LM177:
pushl %ebp
movl %esp,%ebp
.stabn 68,0,387,.LM178-class_get_class_method
.LM178:
movl 12(%ebp),%eax
pushl %eax
movl 8(%ebp),%eax
pushl %eax
call search_for_method_in_hierarchy
addl $8,%esp
movl %eax,%edx
movl %edx,%eax
jmp .L207
.align 16
.stabn 68,0,388,.LM179-class_get_class_method
.LM179:
.L207:
movl %ebp,%esp
popl %ebp
ret
.Lfe16:
.size class_get_class_method,.Lfe16-class_get_class_method
.align 16
.stabs
"search_for_method_in_hierarchy:f82",36,0,397,search_for_method_in_hie
rarchy
.stabs "cls:p37",160,0,396,8
.stabs "sel:p35",160,0,396,12
.type search_for_method_in_hierarchy,@function
search_for_method_in_hierarchy:
.stabn 68,0,397,.LM180-search_for_method_in_hierarchy
.LM180:
pushl %ebp
movl %esp,%ebp
subl $8,%esp
.stabn 68,0,398,.LM181-search_for_method_in_hierarchy
.LM181:
.LBB20:
movl $0,-4(%ebp)
.stabn 68,0,401,.LM182-search_for_method_in_hierarchy
.LM182:
movl 12(%ebp),%eax
pushl %eax
call sel_is_mapped
addl $4,%esp
movb %al,%al
testb %al,%al
jne .L209
.stabn 68,0,402,.LM183-search_for_method_in_hierarchy
.LM183:
xorl %eax,%eax
jmp .L208
.align 16
.L209:
.stabn 68,0,406,.LM184-search_for_method_in_hierarchy
.LM184:
movl 8(%ebp),%eax
movl %eax,-8(%ebp)
.L210:
cmpl $0,-4(%ebp)
jne .L214
cmpl $0,-8(%ebp)
jne .L213
jmp .L214
.align 16
.L214:
jmp .L211
.align 16
.L213:
.stabn 68,0,407,.LM185-search_for_method_in_hierarchy
.LM185:
movl 12(%ebp),%eax
pushl %eax
movl -8(%ebp),%eax
movl 28(%eax),%edx
pushl %edx
call search_for_method_in_list
addl $8,%esp
movl %eax,%eax
movl %eax,-4(%ebp)
.stabn 68,0,406,.LM186-search_for_method_in_hierarchy
.LM186:
.L212:
movl -8(%ebp),%eax
movl 4(%eax),%edx
movl %edx,-8(%ebp)
jmp .L210
.align 16
.L211:
.stabn 68,0,409,.LM187-search_for_method_in_hierarchy
.LM187:
movl -4(%ebp),%eax
jmp .L208
.align 16
.stabn 68,0,410,.LM188-search_for_method_in_hierarchy
.LM188:
.LBE20:
.stabn 68,0,410,.LM189-search_for_method_in_hierarchy
.LM189:
.L208:
movl %ebp,%esp
popl %ebp
ret
.Lfe17:
.size
search_for_method_in_hierarchy,.Lfe17-search_for_method_in_hierarchy
.stabs "method:82",128,0,398,-4
.stabs "class:37",128,0,399,-8
.stabn 192,0,0,.LBB20-search_for_method_in_hierarchy
.stabn 224,0,0,.LBE20-search_for_method_in_hierarchy
.align 16
.stabs
"search_for_method_in_list:f82",36,0,419,search_for_method_in_list
.stabs "list:p44",160,0,418,8
.stabs "op:p35",160,0,418,12
.type search_for_method_in_list,@function
search_for_method_in_list:
.stabn 68,0,419,.LM190-search_for_method_in_list
.LM190:
pushl %ebp
movl %esp,%ebp
subl $12,%esp
.stabn 68,0,420,.LM191-search_for_method_in_list
.LM191:
.LBB21:
movl 8(%ebp),%eax
movl %eax,-4(%ebp)
.stabn 68,0,422,.LM192-search_for_method_in_list
.LM192:
movl 12(%ebp),%eax
pushl %eax
call sel_is_mapped
addl $4,%esp
movb %al,%al
testb %al,%al
jne .L216
.stabn 68,0,423,.LM193-search_for_method_in_list
.LM193:
xorl %eax,%eax
jmp .L215
.align 16
.L216:
.stabn 68,0,426,.LM194-search_for_method_in_list
.LM194:
.L217:
cmpl $0,-4(%ebp)
jne .L219
jmp .L218
.align 16
.L219:
.stabn 68,0,428,.LM195-search_for_method_in_list
.LM195:
.LBB22:
.stabn 68,0,431,.LM196-search_for_method_in_list
.LM196:
movl $0,-8(%ebp)
.L220:
movl -4(%ebp),%eax
movl -8(%ebp),%edx
cmpl %edx,4(%eax)
jg .L223
jmp .L221
.align 16
.L223:
.stabn 68,0,433,.LM197-search_for_method_in_list
.LM197:
.LBB23:
movl -8(%ebp),%edx
movl %edx,%eax
addl %eax,%eax
addl %edx,%eax
leal 0(,%eax,4),%edx
leal 8(%edx),%eax
movl -4(%ebp),%ecx
addl %eax,%ecx
movl %ecx,-12(%ebp)
.stabn 68,0,435,.LM198-search_for_method_in_list
.LM198:
movl -12(%ebp),%eax
cmpl $0,(%eax)
je .L224
.stabn 68,0,436,.LM199-search_for_method_in_list
.LM199:
movl -12(%ebp),%eax
movl (%eax),%edx
movl 12(%ebp),%eax
movl (%edx),%edx
cmpl %edx,(%eax)
jne .L225
.stabn 68,0,437,.LM200-search_for_method_in_list
.LM200:
movl -12(%ebp),%eax
jmp .L215
.align 16
.L225:
.L224:
.stabn 68,0,438,.LM201-search_for_method_in_list
.LM201:
.LBE23:
.stabn 68,0,431,.LM202-search_for_method_in_list
.LM202:
.L222:
incl -8(%ebp)
jmp .L220
.align 16
.L221:
.stabn 68,0,442,.LM203-search_for_method_in_list
.LM203:
movl -4(%ebp),%eax
movl (%eax),%edx
movl %edx,-4(%ebp)
.stabn 68,0,443,.LM204-search_for_method_in_list
.LM204:
.LBE22:
jmp .L217
.align 16
.L218:
.stabn 68,0,445,.LM205-search_for_method_in_list
.LM205:
xorl %eax,%eax
jmp .L215
.align 16
.stabn 68,0,446,.LM206-search_for_method_in_list
.LM206:
.LBE21:
.stabn 68,0,446,.LM207-search_for_method_in_list
.LM207:
.L215:
movl %ebp,%esp
popl %ebp
ret
.Lfe18:
.size
search_for_method_in_list,.Lfe18-search_for_method_in_list
.stabs "method_list:44",128,0,420,-4
.stabn 192,0,0,.LBB21-search_for_method_in_list
.stabs "i:1",128,0,428,-8
.stabn 192,0,0,.LBB22-search_for_method_in_list
.stabs "method:82",128,0,433,-12
.stabn 192,0,0,.LBB23-search_for_method_in_list
.stabn 224,0,0,.LBE23-search_for_method_in_list
.stabn 224,0,0,.LBE22-search_for_method_in_list
.stabn 224,0,0,.LBE21-search_for_method_in_list
.align 16
.stabs "__objc_word_forward:f39",36,0,452,__objc_word_forward
.stabs "rcv:p39",160,0,451,8
.stabs "op:p35",160,0,451,12
.type __objc_word_forward,@function
__objc_word_forward:
.stabn 68,0,452,.LM208-__objc_word_forward
.LM208:
pushl %ebp
movl %esp,%ebp
subl $24,%esp
movl %eax,-20(%ebp)
movl %edx,-16(%ebp)
movl %ecx,-12(%ebp)
leal 8(%ebp),%eax
movl %eax,-24(%ebp)
leal -24(%ebp),%eax
.stabn 68,0,453,.LM209-__objc_word_forward
.LM209:
.LBB24:
.stabn 68,0,455,.LM210-__objc_word_forward
.LM210:
movl %eax,-4(%ebp)
.stabn 68,0,456,.LM211-__objc_word_forward
.LM211:
movl -4(%ebp),%eax
pushl %eax
movl 12(%ebp),%eax
pushl %eax
movl 8(%ebp),%eax
pushl %eax
call __objc_forward
addl $12,%esp
movl %eax,%eax
movl %eax,-8(%ebp)
.stabn 68,0,457,.LM212-__objc_word_forward
.LM212:
cmpl $0,-8(%ebp)
je .L227
.stabn 68,0,458,.LM213-__objc_word_forward
.LM213:
movl -8(%ebp),%ecx
movl (%ecx),%eax
movl 4(%ecx),%edx
movl -8(%ebp),%ecx
addl $8,%ecx
fldt (%ecx)
fstp %st(0)
jmp .L226
.align 16
jmp .L228
.align 16
.L227:
.stabn 68,0,460,.LM214-__objc_word_forward
.LM214:
movl -8(%ebp),%eax
jmp .L226
.align 16
.L228:
.stabn 68,0,461,.LM215-__objc_word_forward
.LM215:
.LBE24:
.stabn 68,0,461,.LM216-__objc_word_forward
.LM216:
.L226:
movl %ebp,%esp
popl %ebp
ret
.Lfe19:
.size __objc_word_forward,.Lfe19-__objc_word_forward
.stabs "args:22",128,0,453,-4
.stabs "res:22",128,0,453,-8
.stabn 192,0,0,.LBB24-__objc_word_forward
.stabn 224,0,0,.LBE24-__objc_word_forward
.align 16
.stabs "__objc_block_forward:f98",36,0,469,__objc_block_forward
.stabs "rcv:p39",160,0,468,12
.stabs "op:p35",160,0,468,16
.type __objc_block_forward,@function
__objc_block_forward:
.stabn 68,0,469,.LM217-__objc_block_forward
.LM217:
pushl %ebp
movl %esp,%ebp
subl $24,%esp
pushl %ebx
movl %eax,-20(%ebp)
movl %edx,-16(%ebp)
movl %ecx,-12(%ebp)
leal 8(%ebp),%eax
movl %eax,-24(%ebp)
leal -24(%ebp),%eax
.stabn 68,0,470,.LM218-__objc_block_forward
.LM218:
.LBB25:
.stabn 68,0,472,.LM219-__objc_block_forward
.LM219:
movl %eax,-4(%ebp)
.stabn 68,0,473,.LM220-__objc_block_forward
.LM220:
movl -4(%ebp),%eax
pushl %eax
movl 16(%ebp),%eax
pushl %eax
movl 12(%ebp),%eax
pushl %eax
call __objc_forward
addl $12,%esp
movl %eax,%eax
movl %eax,-8(%ebp)
.stabn 68,0,474,.LM221-__objc_block_forward
.LM221:
cmpl $0,-8(%ebp)
je .L230
.stabn 68,0,475,.LM222-__objc_block_forward
.LM222:
movl -8(%ebp),%ecx
movl (%ecx),%eax
movl 4(%ecx),%edx
movl -8(%ebp),%ecx
addl $8,%ecx
fldt (%ecx)
fstp %st(0)
jmp .L229
.align 16
.L230:
.stabn 68,0,476,.LM223-__objc_block_forward
.LM223:
.LBE25:
.stabn 68,0,476,.LM224-__objc_block_forward
.LM224:
.L229:
movl 8(%ebp),%eax
movl -28(%ebp),%ebx
movl %ebp,%esp
popl %ebp
ret
.Lfe20:
.size __objc_block_forward,.Lfe20-__objc_block_forward
.stabs "args:22",128,0,470,-4
.stabs "res:22",128,0,470,-8
.stabn 192,0,0,.LBB25-__objc_block_forward
.stabn 224,0,0,.LBE25-__objc_block_forward
.data
.align 4
.type frwd_sel.111,@object
.size frwd_sel.111,4
frwd_sel.111:
.long 0
.section .rodata
.LC12:
.string "forward::"
.LC13:
.string "doesNotRecognize:"
.LC14:
.string "class"
.LC15:
.string "instance"
.LC16:
.string "(%s) %s does not recognize %s"
.LC17:
.string "error:"
.LC18:
.string "fatal: %s\n"
.text
.align 16
.stabs "__objc_forward:f22",36,0,483,__objc_forward
.stabs "object:p39",160,0,482,8
.stabs "sel:p35",160,0,482,12
.stabs "args:p55",160,0,482,16
.type __objc_forward,@function
__objc_forward:
.stabn 68,0,483,.LM225-__objc_forward
.LM225:
pushl %ebp
movl %esp,%ebp
subl $28,%esp
pushl %edi
pushl %esi
pushl %ebx
.stabn 68,0,484,.LM226-__objc_forward
.LM226:
.LBB26:
.stabn 68,0,489,.LM227-__objc_forward
.LM227:
cmpl $0,frwd_sel.111
jne .L232
.stabn 68,0,490,.LM228-__objc_forward
.LM228:
pushl $.LC12
call sel_get_any_uid
addl $4,%esp
movl %eax,%eax
movl %eax,frwd_sel.111
.L232:
.stabn 68,0,492,.LM229-__objc_forward
.LM229:
movl frwd_sel.111,%eax
pushl %eax
movl 8(%ebp),%eax
pushl %eax
call __objc_responds_to
addl $8,%esp
movb %al,%al
testb %al,%al
je .L233
.stabn 68,0,494,.LM230-__objc_forward
.LM230:
movl frwd_sel.111,%eax
pushl %eax
movl 8(%ebp),%eax
movl (%eax),%edx
pushl %edx
call get_imp
addl $8,%esp
movl %eax,%eax
movl %eax,-4(%ebp)
.stabn 68,0,495,.LM231-__objc_forward
.LM231:
movl 16(%ebp),%eax
pushl %eax
movl 12(%ebp),%eax
pushl %eax
movl frwd_sel.111,%eax
pushl %eax
movl 8(%ebp),%eax
pushl %eax
movl -4(%ebp),%ecx
movl %ecx,-12(%ebp)
movl -12(%ebp),%ecx
call *%ecx
addl $16,%esp
movl %eax,%edx
movl %edx,%eax
jmp .L231
.align 16
.L233:
.stabn 68,0,500,.LM232-__objc_forward
.LM232:
pushl $.LC13
call sel_get_any_uid
addl $4,%esp
movl %eax,%eax
movl %eax,-8(%ebp)
.stabn 68,0,501,.LM233-__objc_forward
.LM233:
movl -8(%ebp),%eax
pushl %eax
movl 8(%ebp),%eax
pushl %eax
call __objc_responds_to
addl $8,%esp
movb %al,%al
testb %al,%al
je .L234
.stabn 68,0,503,.LM234-__objc_forward
.LM234:
movl -8(%ebp),%eax
pushl %eax
movl 8(%ebp),%eax
movl (%eax),%edx
pushl %edx
call get_imp
addl $8,%esp
movl %eax,%eax
movl %eax,-4(%ebp)
.stabn 68,0,504,.LM235-__objc_forward
.LM235:
movl 12(%ebp),%eax
pushl %eax
movl -8(%ebp),%eax
pushl %eax
movl 8(%ebp),%eax
pushl %eax
movl -4(%ebp),%ecx
movl %ecx,-16(%ebp)
movl -16(%ebp),%ecx
call *%ecx
addl $12,%esp
movl %eax,%edx
movl %edx,%eax
jmp .L231
.align 16
.L234:
.stabn 68,0,510,.LM236-__objc_forward
.LM236:
.LBB27:
movl %esp,-20(%ebp)
movl 12(%ebp),%eax
pushl %eax
call sel_get_name
addl $4,%esp
movl %eax,%eax
pushl %eax
call strlen
addl $4,%esp
movl %eax,%ebx
movl 8(%ebp),%eax
movl (%eax),%edx
movl 8(%edx),%eax
pushl %eax
call strlen
addl $4,%esp
movl %eax,%eax
leal 256(%eax),%edx
addl %edx,%ebx
decl %ebx
leal 1(%ebx),%esi
movl %esi,%eax
leal 0(,%eax,8),%edx
movl %edx,%esi
leal 1(%ebx),%edi
leal 3(%edi),%eax
movl %eax,%edx
shrl $2,%edx
movl %edx,%eax
leal 0(,%eax,4),%edx
subl %edx,%esp
movl %esp,-24(%ebp)
.stabn 68,0,514,.LM237-__objc_forward
.LM237:
movl 12(%ebp),%eax
pushl %eax
call sel_get_name
addl $4,%esp
movl %eax,%eax
pushl %eax
movl 8(%ebp),%eax
movl (%eax),%edx
movl 8(%edx),%eax
pushl %eax
movl 8(%ebp),%eax
cmpl $0,(%eax)
je .L235
movl 8(%ebp),%eax
movl (%eax),%edx
movl 16(%edx),%eax
andl $2,%eax
testl %eax,%eax
je .L235
movl $.LC14,%eax
jmp .L236
.align 16
.L235:
movl $.LC15,%eax
.L236:
pushl %eax
pushl $.LC16
movl -24(%ebp),%ecx
pushl %ecx
call sprintf
addl $20,%esp
.stabn 68,0,520,.LM238-__objc_forward
.LM238:
pushl $.LC17
call sel_get_any_uid
addl $4,%esp
movl %eax,%eax
movl %eax,-8(%ebp)
.stabn 68,0,521,.LM239-__objc_forward
.LM239:
movl -8(%ebp),%eax
pushl %eax
movl 8(%ebp),%eax
pushl %eax
call __objc_responds_to
addl $8,%esp
movb %al,%al
testb %al,%al
je .L237
.stabn 68,0,523,.LM240-__objc_forward
.LM240:
movl -8(%ebp),%eax
pushl %eax
movl 8(%ebp),%eax
movl (%eax),%edx
pushl %edx
call get_imp
addl $8,%esp
movl %eax,%eax
movl %eax,-4(%ebp)
.stabn 68,0,524,.LM241-__objc_forward
.LM241:
movl -24(%ebp),%ecx
pushl %ecx
pushl $.LC17
call sel_get_any_uid
addl $4,%esp
movl %eax,%eax
pushl %eax
movl 8(%ebp),%eax
pushl %eax
movl -4(%ebp),%ecx
movl %ecx,-28(%ebp)
movl -28(%ebp),%ecx
call *%ecx
addl $12,%esp
movl %eax,%eax
.LBB28:
movl -20(%ebp),%esp
.LBE28:
movl %eax,%eax
jmp .L231
.align 16
.L237:
.stabn 68,0,529,.LM242-__objc_forward
.LM242:
movl -24(%ebp),%ecx
pushl %ecx
pushl $.LC18
pushl $_IO_stderr_
call fprintf
addl $12,%esp
.stabn 68,0,530,.LM243-__objc_forward
.LM243:
call abort
.align 16
.stabn 68,0,531,.LM244-__objc_forward
.LM244:
movl -20(%ebp),%esp
.LBE27:
.stabn 68,0,532,.LM245-__objc_forward
.LM245:
.LBE26:
.stabn 68,0,532,.LM246-__objc_forward
.LM246:
.L231:
leal -40(%ebp),%esp
popl %ebx
popl %esi
popl %edi
movl %ebp,%esp
popl %ebp
ret
.Lfe21:
.size __objc_forward,.Lfe21-__objc_forward
.stabs "imp:40",128,0,484,-4
.stabs "frwd_sel:V35",38,0,485,frwd_sel.111
.stabs "err_sel:35",128,0,486,-8
.stabn 192,0,0,.LBB26-__objc_forward
.stabs "msg:100=*101=ar1;0;-1;2",128,0,512,-24
.stabn 192,0,0,.LBB27-__objc_forward
.stabn 192,0,0,.LBB28-__objc_forward
.stabn 224,0,0,.LBE28-__objc_forward
.stabn 224,0,0,.LBE27-__objc_forward
.stabn 224,0,0,.LBE26-__objc_forward
.section .rodata
.LC19:
.string "2-level sparse arrays"
.LC20:
.string "memory usage: (%s)\n"
.LC21:
.string "arrays: %d = %ld bytes\n"
.LC22:
.string "buckets: %d = %ld bytes\n"
.LC23:
.string "idxtables: %d = %ld bytes\n"
.LC24:
.string "-----------------------------------\n"
.LC25:
.string "total: %d bytes\n"
.LC26:
.string "===================================\n"
.text
.align 16
.stabs
"__objc_print_dtable_stats:F19",36,0,535,__objc_print_dtable_stats
.globl __objc_print_dtable_stats
.type __objc_print_dtable_stats,@function
__objc_print_dtable_stats:
.stabn 68,0,535,.LM247-__objc_print_dtable_stats
.LM247:
pushl %ebp
movl %esp,%ebp
subl $4,%esp
.stabn 68,0,536,.LM248-__objc_print_dtable_stats
.LM248:
.LBB29:
movl $0,-4(%ebp)
.stabn 68,0,537,.LM249-__objc_print_dtable_stats
.LM249:
pushl $.LC19
pushl $.LC20
call printf
addl $8,%esp
.stabn 68,0,545,.LM250-__objc_print_dtable_stats
.LM250:
movl narrays,%edx
movl %edx,%eax
sall $2,%eax
addl %edx,%eax
leal 0(,%eax,4),%edx
pushl %edx
movl narrays,%eax
pushl %eax
pushl $.LC21
call printf
addl $12,%esp
.stabn 68,0,546,.LM251-__objc_print_dtable_stats
.LM251:
movl narrays,%edx
movl %edx,%eax
sall $2,%eax
addl %edx,%eax
leal 0(,%eax,4),%edx
addl %edx,-4(%ebp)
.stabn 68,0,547,.LM252-__objc_print_dtable_stats
.LM252:
movl nbuckets,%eax
movl %eax,%ecx
movl %ecx,%edx
sall $5,%edx
addl %eax,%edx
leal 0(,%edx,4),%eax
pushl %eax
movl nbuckets,%eax
pushl %eax
pushl $.LC22
call printf
addl $12,%esp
.stabn 68,0,548,.LM253-__objc_print_dtable_stats
.LM253:
movl nbuckets,%eax
movl %eax,%ecx
movl %ecx,%edx
sall $5,%edx
addl %eax,%edx
leal 0(,%edx,4),%eax
addl %eax,-4(%ebp)
.stabn 68,0,550,.LM254-__objc_print_dtable_stats
.LM254:
movl idxsize,%eax
movl %eax,%edx
leal 0(,%edx,4),%eax
pushl %eax
movl idxsize,%eax
pushl %eax
pushl $.LC23
call printf
addl $12,%esp
.stabn 68,0,551,.LM255-__objc_print_dtable_stats
.LM255:
movl idxsize,%eax
movl %eax,%edx
leal 0(,%edx,4),%eax
addl %eax,-4(%ebp)
.stabn 68,0,552,.LM256-__objc_print_dtable_stats
.LM256:
pushl $.LC24
call printf
addl $4,%esp
.stabn 68,0,553,.LM257-__objc_print_dtable_stats
.LM257:
movl -4(%ebp),%eax
pushl %eax
pushl $.LC25
call printf
addl $8,%esp
.stabn 68,0,554,.LM258-__objc_print_dtable_stats
.LM258:
pushl $.LC26
call printf
addl $4,%esp
.stabn 68,0,555,.LM259-__objc_print_dtable_stats
.LM259:
.LBE29:
.stabn 68,0,555,.LM260-__objc_print_dtable_stats
.LM260:
.L238:
movl %ebp,%esp
popl %ebp
ret
.Lfe22:
.size
__objc_print_dtable_stats,.Lfe22-__objc_print_dtable_stats
.stabs "total:1",128,0,536,-4
.stabn 192,0,0,.LBB29-__objc_print_dtable_stats
.stabn 224,0,0,.LBE29-__objc_print_dtable_stats
.align 16
.stabs "sarray_get:f22",36,0,199,sarray_get
.stabs "array:p46",160,0,198,8
.stabs "index:p4",160,0,198,12
.type sarray_get,@function
sarray_get:
.stabs "sarray.h",132,0,0,.Ltext3
.Ltext3:
.stabn 68,0,199,.LM261-sarray_get
.LM261:
pushl %ebp
movl %esp,%ebp
subl $4,%esp
pushl %ebx
movl 8(%ebp),%edx
movl 12(%ebp),%ecx
.stabn 68,0,201,.LM262-sarray_get
.LM262:
.LBB30:
.stabn 68,0,202,.LM263-sarray_get
.LM263:
movl %ecx,-4(%ebp)
.stabn 68,0,210,.LM264-sarray_get
.LM264:
movzwl -4(%ebp),%eax
movl %eax,%ebx
leal 0(,%ebx,4),%eax
movl (%edx),%ebx
movl (%ebx,%eax),%eax
movzwl -2(%ebp),%ebx
movl (%eax,%ebx,4),%eax
jmp .L109
.align 16
.stabn 68,0,222,.LM265-sarray_get
.LM265:
.LBE30:
.stabn 68,0,222,.LM266-sarray_get
.LM266:
.L109:
movl -8(%ebp),%ebx
movl %ebp,%esp
popl %ebp
ret
.Lfe23:
.size sarray_get,.Lfe23-sarray_get
.stabs "array:r46",64,0,198,2
.stabs "index:r4",64,0,198,1
.stabs "x:93",128,0,201,-4
.stabn 192,0,0,.LBB30-sarray_get
.stabn 224,0,0,.LBE30-sarray_get
.text
.stabs "",100,0,0,.Letext
.Letext:
.ident "GCC: (GNU) 2.7.0"
-------------------
Finally, my test program in four files. Try.[hm], and main.c, and a
makefile
/* Try.h */
#include <objc/Object.h>
@interface Try : Object
{
char *string;
}
- init;
- (char *) string;
- setString: (char *) s;
@end
/* Try.m */
#include <stdlib.h>
#include <string.h>
#include "Try.h"
@implementation Try
- init
{
string = NULL;
return self;
}
- (char *) string
{
return string;
}
- setString: (char *) s
{
if (string) free(string);
string = strdup(s);
return self;
}
@end
/* main.c */
#include "Try.h"
void main()
{
id try;
try = [[Try alloc] init];
[try setString: "TestString"];
printf("Output: %s\n", [try string]);
}
# makefile
try: Try.o main.o
cc -o try -g Try.o main.o /robert/gcc-2.7.0/libobjc.a
main.o: main.c
cc -Wall -g -c -x objective-c main.c
Try.o : Try.m Try.h
cc -Wall -g -c Try.m
I badly need release 2.7.0 of this compiler, as there are many
other changes in the Objective-C compiler which I would like to
take advantage of. A fix or any help would be much apreciated. I
hope I have included sufficient detail to describe the problem. If
not, please let me know what else I should provide.
Regards. and a Happy New Year as well, from a frigid Scotland
Robert Bradford
Holestone Lodge, Pool O'Muckhart, Dollar, Clackmannanshire Fk14 7JW
Tel + Fax: +44-1259-781-601 Email: robert@digit.demon.co.uk
Technical Details
Message-ID:
<9512291843.AA10353@digit.demon.co.uk>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailShow Full Headers
Complete Article Headers
X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 113d02,75c8335836d8d287,start X-Google-Attributes: gid113d02,public From: robert@digit.demon.co.uk (Robert Bradford) Subject: Objective-C bug in initialisation code Date: 1995/12/29 Message-ID: <9512291843.AA10353@digit.demon.co.uk> X-Deja-AN: 123155199 distribution: gnu sender: daemon@cis.ohio-state.edu organization: GNUs Not Usenet newsgroups: gnu.gcc.bug