🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: gnu.gcc.bug
Article #6265

Objective-C bug in initialisation code

#6265
From: Robert Bradford
Date: Fri, 29 Dec 1995 00:00
3495 lines
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-mail

Show 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