+
+ if ( ( @shares > 0 ) && ( @requires > 0 ) ) {
+ # A shared symbol is being referenced from another object
+ $problems->{$_}->{shared}->{$symbol} = 1 foreach @requires;
+ }
+
+ if ( ( @shares > 0 ) && ( @provides > 0 ) ) {
+ # A shared symbol is being initialised by an object
+ $problems->{$_}->{shared}->{$symbol} = 1 foreach @provides;
+ }
+
+ if ( ( @shares > 0 ) && ! ( $symbol =~ /^_shared_/ ) ) {
+ # A shared symbol is not declared via __shared
+ $problems->{$_}->{shared}->{$symbol} = 1 foreach @shares;
+ }
+
+ if ( @provides > 1 ) {
+ # A non-shared symbol is defined in multiple objects
+ $problems->{$_}->{multiples}->{$symbol} = 1 foreach @provides;
+ }
+}
+
+# Check for excessively large local symbols
+#
+while ( ( my $object, my $symbols ) = each %$symtab ) {
+ while ( ( my $symbol, my $info ) = each %$symbols ) {
+ if ( ( ! $info->{global} ) &&
+ ( $info->{type} ne 't' ) &&
+ ( $info->{size} >= WARNING_SIZE ) ) {
+ $problems->{$object}->{large}->{$symbol} = 1;
+ }
+ }